MANIFEST.inファイルなしでsdist
にpackage_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ファイルなしでsdist
にpackage_data
を含めるにはどうすればよいですか?
TL; DR:package_data
辞書のキーはpackages;値はグロブのリストです。 ''
は、Pythonパッケージの有効な名前ではありません。
パッケージfoo
のbar.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.py
をpackage_data={'': ['foo/bar.txt']}
で実行すると、foo/bar.txt
がソース配布に追加されないことに同意できますfoo-2015.3.Egg-info/SOURCES.txt
にfoo/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
ファイルに追加されますテンプレートが提供されていない場合。
私は同じ問題を抱えていて、それが削除されるように修正しました:
include_package_data=True