gpt4 book ai didi

python - `data_files` 与 `setup.py` + `pip` 的跨平台支持

转载 作者:太空宇宙 更新时间:2023-11-04 02:21:48 26 4
gpt4 key购买 nike

使用 setup.py(与 pip 兼容)传送 data_files 的跨平台方式是什么?

根据官方文档,需要这样写:

setup(...,
data_files=[('bitmaps', ['bm/b1.gif', 'bm/b2.gif']),
('config', ['cfg/data.cfg']),
('/etc/init.d', ['init-script'])]
)

'bitmaps'等是这些文件应该去的子目录(相对于sys.prefix)。

但是,这对于标准子目录将取决于系统的跨平台安装来说不是最佳选择。此外,在开发人员模式下安装包不会将文件放置在安装后它们稍后所在的位置,这使得查找/使用资源的过程最终难以调试/烦人。

我已经研究过appdirs,但似乎很难让它在安装过程中正常工作,例如如果将用户目录用于数据,这实际上与我的开发环境相关联。

我问这个问题的原因是因为我有一个实现简单 GUI 的小型 Python 包,我想随附一个图标。

郑重声明,我可以使用 setuptools 处理 setup.py

最佳答案

正如评论中所建议的那样,对于捆绑资源文件,我宁愿使用 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']},
)

在代码中访问资源文件的更新:

引入了 Python 3.7 importlib.resources它取代了旧的 pkg_resources功能并提供利用 pathlib 的现代资源机制:

filepath = importlib_resources.path('pkg1', 'icons/image.png')

对于 Python 3.6 及更早版本,有一个名为 importlib_resources 的反向端口.因此,与版本无关的示例是:

import sys

if sys.version_info >= (3, 7):
from importlib import resources as importlib_resources
else:
import importlib_resources

filepath = importlib_resources.path('pkg1', 'icons/image.png')

尽可能使用 importlib_resources 而不是 pkg_resources

原始答案,仅供历史引用

要在代码中引用资源文件,请使用pkg_resources:

import pkg_resources

filepath = pkg_resources.resource_filename('pkg1', 'icons/image.png')

因此,跨平台支持由 pkg_resources 处理。引用ResourceManager API用于可用的资源访问函数。

关于python - `data_files` 与 `setup.py` + `pip` 的跨平台支持,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51419256/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com