如果没有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
包括在内。
或者this blog post仍然是真的吗?http://blog.codekills.net/2011/07/15/lies,-more-lies-and-python-packaging-documentation-on--package_data-/
不过,在过去的一个小时里,我了解到这些说法介于“危险的误导”和“该死的谎言”之间。
这是因为Python包的主要类型是源包,而创建源包的规范方法是使用setup.py sdist
。但是,包数据中指定的数据不包括在源发行版中—它们只包括在二进制(setup.py bdist
)发行版和安装(setup.py install
)发行版中。
如何在没有MANIFEST.in文件的情况下为sdist
包含package_data
?
我也有同样的问题,并修复了删除:
TL;DR:字典中的键是包;值是全局列表。
''
不是任何Python包的有效名称。如果要将
bar.txt
安装在包foo
的__init__.py
旁边,请使用我有布局:
现在,如果
foo
是像上面这样的包,请执行以下操作:在
python setup.py sdist
之后,我检查dist/foo-2015.3.tar.gz
的内容但是,如果我用
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.6 Installing package data;注释为2.7、3.1:相关问题 更多 >
编程相关推荐