打包 python 资源(Manifest.in vs package_data vs data_files)
Packaging python resources (Manifest.in vs package_data vs data_files)
似乎 python 分发包中包含非 python 资源的四种方式之一:
- Manifest.in 文件(我不确定什么时候这个比 package_data 或 data_files 更受欢迎)
- package_data in
setup.py
(用于在 python 导入包中包含资源 )
- data_files in
setup.py
(用于包含资源 outside python import packages)
- 一个叫做
setuptools-scm
的东西(我相信它使用你的版本控制系统而不是 manifest.in 或其他东西来查找资源)
哪些可以从 importlib.resources
访问?
(据我了解,importlib.resources
是访问此类资源的首选方式。)如果无法通过 importlib.resources
访问任何这些资源,那么 could/should 如何访问此类资源?
其他网友被骂建议使用__file__
查找资源路径,因为安装的wheel发行版可能存储为zip文件,因此甚至不会成为您资源的正确路径。 什么时候将轮子提取到站点包中,什么时候保持压缩状态?
所有 (1)-(3) 都会将文件放入您的包中(不知道 (4))。
在运行时,importlib.resources
将能够访问包中的任何数据。
至少用 Python 3.9,可以访问子目录中的资源。
以前,您必须通过添加 __init__
.
使每个子目录成为一个包
至于为什么不使用__file__
:Pythons导入系统有一些奇怪的方法来解析包。例如,如果您使用 Zipapp,它可以在 zip 文件中查找它们。
你甚至可以为你被要求从中加载一些资源的包定制加载器。
谁知道这些资源位于何处?答:importlib.resources.
Afaik,车轮不是竞争者,因为它们已拆包。
似乎 python 分发包中包含非 python 资源的四种方式之一:
- Manifest.in 文件(我不确定什么时候这个比 package_data 或 data_files 更受欢迎)
- package_data in
setup.py
(用于在 python 导入包中包含资源 ) - data_files in
setup.py
(用于包含资源 outside python import packages) - 一个叫做
setuptools-scm
的东西(我相信它使用你的版本控制系统而不是 manifest.in 或其他东西来查找资源)
哪些可以从
importlib.resources
访问?
(据我了解,importlib.resources
是访问此类资源的首选方式。)如果无法通过importlib.resources
访问任何这些资源,那么 could/should 如何访问此类资源?其他网友被骂建议使用
__file__
查找资源路径,因为安装的wheel发行版可能存储为zip文件,因此甚至不会成为您资源的正确路径。 什么时候将轮子提取到站点包中,什么时候保持压缩状态?
所有 (1)-(3) 都会将文件放入您的包中(不知道 (4))。
在运行时,importlib.resources
将能够访问包中的任何数据。
至少用 Python 3.9,可以访问子目录中的资源。
以前,您必须通过添加 __init__
.
至于为什么不使用__file__
:Pythons导入系统有一些奇怪的方法来解析包。例如,如果您使用 Zipapp,它可以在 zip 文件中查找它们。
你甚至可以为你被要求从中加载一些资源的包定制加载器。
谁知道这些资源位于何处?答:importlib.resources.
Afaik,车轮不是竞争者,因为它们已拆包。