Python 如何在没有MANIFEST.in文件的情况下包含包_数据?
在没有MANIFEST.in文件的情况下,如何为Python 如何在没有MANIFEST.in文件的情况下包含包_数据?,python,manifest,packaging,setuptools,setup.py,Python,Manifest,Packaging,Setuptools,Setup.py,在没有MANIFEST.in文件的情况下,如何为sdist包含package\u数据 我的setup.py如下所示: import setuptools setuptools.setup( name='foo', version='2015.3', license='commercial', packages=setuptools.find_packages(), package_data={'': ['foo/bar.txt']}, ) 版本: u
sdist
包含package\u数据
我的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
包括在内
还是仍然是真的
但在过去的一个小时里,我发现这些说法介于“危险的误导”和“该死的谎言”之间。
这是因为Python包的主要类型是源代码包,创建源代码包的规范方法是使用setup.py sdist
。但是,包_数据中指定的数据不包括在源发行版中-它们仅包括在二进制(setup.py bdist
)发行版和安装(setup.py install
)中
在没有MANIFEST.in文件的情况下,如何为
sdist
包含package\u数据?TL;DR:包数据字典中的键是包;这些值是全局的列表<代码>'
不是任何Python包的有效名称
如果希望将bar.txt
安装在软件包foo
的\uuuu init\uuuuuuuuuuuuuuuuupy
旁边,请使用
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
...
但是,如果我使用package_data={'':['foo/bar.txt']}
运行您的setup.py
,我可以同意foo/bar.txt
不会添加到源代码分发中,除非foo-2015.3.egg info/SOURCES.txt
已经有foo/bar.txt
的行,否则该文件也会在源代码分发中弹出
没有使用舱单;setuptools的版本是3.6
(我特意安装了与您使用的相同的旧版本):
上述行为也适用于“遗留”distutils文档的标准
distutils
;对2.7、3.1的注释:
在版本[2.7,3.1]中更改:如果未提供模板,则所有与包_数据
匹配的文件将添加到清单
文件中
我遇到了相同的问题,并已将其修复为删除:
include_package_data=True
谢谢你的详细回答。不幸的是,我只是一字不差地遵循这些说明,
bar.txt
未能出现在foo-2015.3.tar.gz
中。您提到故意使用旧版本的setuptools,但没有说明原因。这能解释为什么它不起作用吗?这个答案并不完全正确。空字符串'
是一个特殊的键,适用于所有包,如中所述:请注意,如果在空字符串下列出包_数据中的模式,则这些模式用于查找每个包中的文件,甚至那些也列出了自己的模式。这也为我解决了问题。有人能解释为什么吗?这里的顶部条目解释了这一点:@AdamErickson不,它没有?
include_package_data=True