42

プロジェクトツリー:

$.
├── happy_birthday-art.txt
├── happy_birthday.py
├── MANIFEST.in
├── README.rst
└── setup.py

setup.py

from setuptools import setup

setup(
    name='Happy_birthday',
    py_modules=['happy_birthday'],
    data_files=['happy_birthday-art.txt'],
    entry_points={
    'console_scripts': ['happy_birthday = happy_birthday:main', ],},
    long_description=open('README.rst').read(),
)

仮想環境で作成したファイルを実行するpython setup.py sdistと、次のメッセージが表示されます。pip install.tar.gz

warning: install_data: setup script did not provide a directory for 'happy-birthday-art.txt' -- installing right in '/home/username/.virtualenvs/happy_birthday'

プログラムはその .txt ファイルを使用するため、後で実行しようとすると失敗します。

happy_birthday-art.txtしかし、別のフォルダーにインストールしたくありません。がインストールされているフォルダにインストールしたいhappy_birthday.py。また、絶対パスを使用する必要はありませんsetup.py。ファイルを最適に設定するにはどうすればよいsetup.pyですか?

4

2 に答える 2

28

このような単一ファイル モジュールがある場合、フォルダーは作成されず、ファイルは他の python モジュール (たとえば、).pyを含むディレクトリに直接移動されます。/usr/lib/pythonX.X/site-packages/そのため、ディレクトリを作成する必要があります。

$ .
|-- happy_birthday/
    |-- __init__.py
    |-- art.txt
|-- MANIFEST.in
|-- README.rst
|-- setup.py
于 2012-09-17T15:04:18.170 に答える
7

http://docs.python.org/2/distutils/setupscript.html

ターゲット ディレクトリを指定せずに、単純な一連のファイルとして data_files オプションを指定できますが、これはお勧めしません。この場合、インストール コマンドは警告を出力します。データ ファイルをターゲット ディレクトリに直接インストールするには、空の文字列ディレクトリとして指定する必要があります。」

ただし、ここでは、ターゲット ディレクトリは site-packages フォルダーではなく、venv のルートであるプレフィックス フォルダーです。.txt を site-packages dir にそのままの状態で配置したい場合は、見た目が悪いだけでなく、実際にはサポートされていないように見えます。一方、「share/doc/foo」など、環境内の別の場所にインストールすることもできます。

data_files=[('share/doc/foo', ['happy_birthday-art.txt'])],
于 2013-07-31T06:49:05.177 に答える