用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
。
答案 0 :(得分:1)
如注释中所建议,对于捆绑资源文件,我宁愿使用package_data并将文件放置在某些包目录下。示例:
project
├── pkg1
│ ├── __init__.py
│ └── icons
│ └── image.png
└── pkg2
└── __init__.py
包装setup.py
脚本:
from setuptools import setup
setup(
...
package_data={'pkg1': ['icons/image.png']},
)
要在代码中引用资源文件,请使用pkg_resources
:
import pkg_resources
filepath = pkg_resources.resource_filename('pkg1', 'icons/image.png')
跨平台支持因此由pkg_resources
处理。有关可用的资源访问功能,请参见ResourceManager
API。
答案 1 :(得分:0)
更新 从@ solution
中检出hoefling data_files
选项指定要为您的软件包上传的文件。
来自docs:
文件中没有目录信息用于确定已安装文件的最终位置;仅使用文件名。
如果要构建跨平台目录路径,请使用os
模块
import os
path = os.path.join('root', 'directory')
如果您要在有人尝试构建软件包时确定平台,请使用sys
模块
import sys
current_platform = sys.platform.lower()
is_windows = current_platform.startswith('win')
is_ubuntu = 'ubuntu' in current_platform
is_mac = 'darwin' in current_platform
if is_windows:
... # windows specific dayta
elif is_ubuntu:
....
else:
raise Exception('Platform not supported')