web-dev-qa-db-ja.com

MANIFEST.inファイルなしでpackage_dataを含めるにはどうすればよいですか?

MANIFEST.inファイルなしでsdistpackage_dataを含めるにはどうすればよいですか?

私のsetup.pyは次のようになります:

import setuptools

setuptools.setup(
    name='foo',
    version='2015.3',
    license='commercial',
    packages=setuptools.find_packages(),

    package_data={'': ['foo/bar.txt']},
)

バージョン:

user@Host> python
Python 2.7.6 (default, Mar 22 2014, 22:59:56) 
>>> import setuptools
>>> setuptools.version.__version__
'3.6'

foo/bar.txtを含めることができません。

または このブログ投稿 はまだ本当ですか? http://blog.codekills.net/2011/07/15/lies,-more-lies-and-python-packaging-documentation-on--package_data-/

しかし、この1時間で、これらの発言が「危険なほど誤解を招く」と「いまいましい嘘」の間にあることがわかりました。これは、Pythonパッケージの主なタイプがソースパッケージであり、ソースパッケージを作成する標準的な方法はsetup.py sdistを使用することです。ただし、package_dataで指定されたデータはソースディストリビューションに含まれる—バイナリ(setup.py bdist)ディストリビューションとインストール(setup.py install)にのみ含まれます。

MANIFEST.inファイルなしでsdistpackage_dataを含めるにはどうすればよいですか?

28
guettli

TL; DRpackage_data辞書のキーはpackages;値はグロブのリストです。 ''は、Pythonパッケージの有効な名前ではありません。

パッケージfoobar.txtの横に__init__.pyをインストールする場合は、

 package_data={'foo': ['bar.txt']}

私はレイアウトを持っています:

foo/
        __init__.py
        bar.txt
setup.py

ここで、fooが上記のようなパッケージである場合は、次のようにします。

import setuptools

setuptools.setup(
    name='foo',
    version='2015.3',
    license='commercial',
    packages=setuptools.find_packages(),
    package_data={'foo': ['bar.txt']},
)

python setup.py sdistの後に、dist/foo-2015.3.tar.gzの内容を確認します

% tar tfz dist/foo-2015.3.tar.gz
...
foo-2015.3/foo/bar.txt
...

ただし、setup.pypackage_data={'': ['foo/bar.txt']}で実行すると、foo/bar.txtがソース配布に追加されないことに同意できますfoo-2015.3.Egg-info/SOURCES.txtfoo/bar.txtの行がすでにある場合を除きます-その場合、ファイルはソース配布にもポップアップします

マニフェストは使用されませんでした。 setuptoolsのバージョンは3.6でした(私は使用していたものと同じ古いバージョンを故意にインストールしました):

>>> import setuptools
>>> setuptools.__version__
'3.6'

上記の動作は、標準のdistutilsでも機能します。 2.6パッケージデータのインストール "レガシー" distutilsドキュメントの=; 2.7、3.1のコメント付き:

バージョンの変更[2.7、3.1]package_dataに一致するすべてのファイルがMANIFESTファイルに追加されますテンプレートが提供されていない場合

41
Antti Haapala

私は同じ問題を抱えていて、それが削除されるように修正しました:

include_package_data=True
12
John P