プロジェクトツリー:
$.
├── 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
ファイルを最適に設定するにはどうすればよいですか?
このような単一ファイルモジュールがある場合、フォルダは作成されません。.py
ファイルは、他のpythonモジュール(/usr/lib/pythonX.X/site-packages/
、 例えば)。それがあなたがhaveディレクトリを作成する理由です:
$ .
|-- happy_birthday/
|-- __init__.py
|-- art.txt
|-- MANIFEST.in
|-- README.rst
|-- setup.py
http://docs.python.org/2/distutils/setupscript.html
「ターゲットディレクトリを指定せずに、data_filesオプションをファイルの単純なシーケンスとして指定できますが、これはお勧めしません。この場合、installコマンドは警告を出力します。データファイルをターゲットディレクトリに直接インストールするには、空の文字列ディレクトリとして指定する必要があります。」
ただし、ここでは、ターゲットディレクトリはsite-packagesフォルダーではなく、venvのルートであるプレフィックスフォルダーです。 .txtをsite-packagesdir bareに配置したい場合は、見た目が醜いだけでなく、実際にはサポートされていないように見えます。一方、環境内の別の場所、たとえば「share/doc/foo」にインストールすることは可能です。
data_files=[('share/doc/foo', ['happy_birthday-art.txt'])],