【发布时间】:2018-07-19 09:39:08
【问题描述】:
将data_files 与setup.py(与pip 兼容)传送的跨平台方式是什么?
从官方文档来看,需要这样写:
setup(...,
data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
('config', ['cfg/data.cfg']),
('/etc/init.d', ['init-script'])]
)
和'bitmaps' 等是这些文件应该存放的子目录(相对于sys.prefix)。
但是,对于标准子目录将取决于系统的跨平台安装,这不是最佳选择。 此外,在开发人员模式下安装软件包不会将文件放置在安装后的位置,从而使查找/使用资源的过程最终难以调试/令人讨厌。
我查看了appdirs,但在安装过程中似乎很难使其正常工作,例如如果使用用户目录存储数据,这实际上与我的开发环境相关。
我问这个的原因是因为我有一个小的 Python 包,它实现了一个简单的 GUI,我想附带一个图标。
为了记录,我可以处理 setup.py 和 setuptools。
【问题讨论】:
-
请注意,绝对目标路径无论如何都不适用于
pip,因为所有绝对data_files目标都将相对于site-packages,有关更多详细信息,请参阅我的答案here。对于捆绑资源文件,我宁愿使用package_data并将文件放在某个包目录下。然后您可以跨平台方式引用带有pkg_resources.resource_file()等的文件。 -
感谢您的提示。我最终将
package_data与pkg_resources.resource_filename()结合使用。奇怪的是,使用package_data,我无法使用 Python 2 构建包(尽管生成的包与 Python 2 兼容)。如果您弥补您的评论作为答案,我很乐意接受。 -
你是在构建源 dist 还是*?你得到什么错误?如果您使用错误详细信息更新您的问题(或提出新问题并在此处链接),我会尽力提供帮助。