使用setuptools / distribute时,我无法让安装程序提取任何package_data文件 . 我读过的所有内容都表明以下是正确的方法 . 有人可以建议吗?
setup(
name='myapp',
packages=find_packages(),
package_data={
'myapp': ['data/*.txt'],
},
include_package_data=True,
zip_safe=False,
install_requires=['distribute'],
)
其中 myapp/data/
是数据文件的位置 .
8 回答
我意识到这是一个老问题......但是对于那些通过谷歌找到方法的人来说:
package_data
是一个低调的,dirty lie . 它仅在构建二进制包(python setup.py bdist ...
)时使用,但在构建源包(python setup.py sdist ...
)时不使用 . 当然,这是荒谬的 - 人们会期望构建源代码分发会导致可以发送给其他人构建二进制分发的文件集合 .在任何情况下,使用MANIFEST.in都可以用于二进制和源代码分发 .
我刚才有同样的问题 . 解决方案,只是删除
include_package_data=True
.在reading here之后,我意识到
include_package_data
旨在包含来自 version control 的文件,而不仅仅是"include package data",顾名思义 . 来自文档:把这个论点修正了,这恰巧是为什么当你切换到distutils时它也起作用,因为它没有采取这个论点 .
以下@Joe建议删除
include_package_data=True
也对我有用 .为了详细说明,我有 no
MANIFEST.in
文件 . 我使用Git而不是CVS .存储库采用这种形式:
setup.py
:我为源发送器运行
python setup.py sdist
(尚未尝试二进制) .当在一个全新的虚拟环境中,我有一个
myproject-4.19.tar.gz
,文件,我使用除了安装到我的虚拟环境
site-packages
的所有内容之外,这些特殊数据文件安装到/opt/local/myproject/data
和/opt/local/myproject/etc
.include_package_data=True
为我工作 .如果您使用git,请记住在
install_requires
中包含setuptools-git
. 比Manifest
或包含package_data
中的所有路径(在我的情况下它是一个带有各种静态的django应用程序)更不无聊(粘贴我发表的评论,因为k3-rnc提到它实际上是有帮助的)
Update :此答案陈旧,信息不再有效 . 所有setup.py配置都应使用
import setuptools
. 我在https://stackoverflow.com/a/49501350/64313添加了更完整的答案我通过切换到distutils来解决这个问题 . 看起来分布已被弃用和/或破坏 .
古老的问题然而......蟒蛇的包管理确实有很多不足之处 . 所以我有一个使用pip本地安装到指定目录的用例,并且很惊讶package_data和data_files路径都没有用完 . 我并不热衷于在repo中添加另一个文件,所以我最终利用了data_files和setup.py选项--install-data;这样的事情
将包含数据包的文件夹移动到模块文件夹中解决了我的问题 .
看到这个问题:MANIFEST.in ignored on "python setup.py install" - no data files installed?
这几天我遇到了同样的问题,但即便是这个线程对我来说也不清楚 . 一切都让人困惑 . 所以我做了我的研究并找到了解决方案 . 基本上在这种情况下,这是你应该做的:
The full other stackoverflow answer here