- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
使用 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/
运行 pip install 似乎在 /usr/local 中创建了 data_files 中指定的目录结构和文件 但是,如果我运行: import sys sys.prefix 我得到字符串 /us
我使用 pip 和 setuptools 来安装一个包。我希望 pip 将一些资源文件复制到 /etc/my_package。 我的 setup.py 看起来像这样: setup( ...
我是 distutils 的新手。我正在尝试在包中包含一些数据文件。这是我的代码。。 from distutils.core import setup setup(name='Scrapper',
对于使用“setup.py”构建安装包的开发人员来说,这应该是一个非常常见的问题,之前应该被问过,但我在任何地方都找不到合适的答案。 在 setup.py 中 from distutils.core
我正在尝试创建一个 Python 包,并且我的目录结构如下: mypkg/ ├── __init__.py ├── module1 │ ├── x.py │ ├── y.py │ └──
似乎非python资源包含在python分发包中的4种方式之一: Manifest.in 文件(我不确定何时优先于 package_data 或 data_files) package_data in
使用 setup.py(与 pip 兼容)传送 data_files 的跨平台方式是什么? 根据官方文档,需要这样写: setup(..., data_files=[('bitmaps', [
设置的 data_files 参数采用以下格式输入: setup(... data_files = [(target_directory, [list of files to be put t
我正在尝试将 data_file 添加到 setup.py 项目中。我可以使用 /tmp/ 目录中的文件,但不能使用脚本的当前目录中的文件: from setuptools import setup,
我有一个 Python 3 项目。 MKC ├── latex │ ├── macros.tex │ └── main.tex ├── mkc │ ├── cache.py │ ├──
我有一个带有 setup.py 的 Python 应用程序脚本,可以通过 Pip 或 setuptools 安装。但是,我发现这两种方法之间存在一些令人讨厌的差异,我想知道分发数据文件的正确方法。 i
我正在尝试为我的 CLI 工具提供一个用 Python 编写的 bash 完成脚本。根据Python Packaging Authority , data_files在 setup.py 中正是我需要
我试图将网络 Assets 与我试图打包的网络应用程序一起分发,但我失败得很惨。我不明白为什么我在运行 bdist、sdist 或 install 时有不同的安装文件或包列表。 项目布局 该项目在 A
我是一名优秀的程序员,十分优秀!