2012-09-17 13 views
27

プロジェクトツリー:任意のフォルダを作成することなく、単一の.pyファイルと1つのデータファイルのパッケージ化のためのsetup.pyを設定

$. 
├── 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 sdistpip 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ファイルを設定するにはどうすればよいですか?

+0

クレームはawkardnessが位置HTTPからのものであるということです。 com/a/5423147/1240268(パッケージ内にあれば無料です) –

答えて

13

このような単一ファイルモジュールがある場合、フォルダは作成されません。.pyファイルは、他のPythonモジュール(たとえば/usr/lib/pythonX.X/site-packages/)を含むディレクトリに直接移動されます。ディレクトリを作成するを持っている理由です:

$ . 
|-- happy_birthday/ 
    |-- __init__.py 
    |-- art.txt 
|-- MANIFEST.in 
|-- README.rst 
|-- setup.py 
3

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

「あなたはターゲットディレクトリを指定せずにファイル の簡単なシーケンスとしてDATA_FILESオプションを指定することができますが、これは推奨されません、 この場合、インストールコマンドで警告が表示されます。 データファイルを直接ターゲットディレクトリにインストールするには、空の文字列を と指定する必要があります。

ただし、ここでのターゲットディレクトリはsite-packagesフォルダではなく、 プレフィックスフォルダ(venvのルート)です。 .txtをサイトパッケージのディレクトリに置いておきたい場合は、醜いだけでなく、本当にサポートされていないように見えます。他方では、「共有/ DOC/FOO」で、例えば、ENVで別の場所にインストールすることが可能である:// stackoverflowの:

data_files=[('share/doc/foo', ['happy_birthday-art.txt'])],