如何在没有MANIFEST.in文件的情况下包含package_data?
我怎么能包括package_data
为sdist
没有MANIFEST.in文件?
我的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-/
不过,在过去的一个小时中,我了解到这些陈述介于“危险误导”和“该死的谎言”之间。
这是因为Python包的主要类型是源包,而使用来创建源包的规范方法setup.py
sdist
。但是,package_data中指定的数据不包括在源发行版中,它们仅包括在二进制(setup.py
bdist
)发行版和安装(setup.py install
)中。
我怎么能包括package_data
为sdist
没有MANIFEST.in文件?
-
TL; DR :
package_data
字典中的键是 包 ;值是glob列表。''
不是任何Python软件包的有效名称。如果要
bar.txt
安装在__init__.py
软件包的旁边foo
,请使用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的注释:Changed in version [2.7, 3.1] : All the files that match
package_data
will be added to theMANIFEST
file if no template is provided.