打包python资源(Manifest.in vs package_data vs data_文件)
python发行包中似乎包含了非python资源,这是4种方式之一:打包python资源(Manifest.in vs package_data vs data_文件),python,resources,setuptools,python-importlib,Python,Resources,Setuptools,Python Importlib,python发行包中似乎包含了非python资源,这是4种方式之一: 文件中的Manifest.in(我不确定这是首选于包_数据还是数据_文件) setup.py中的包_数据(用于在python导入包中包含资源) setup.py中的数据文件(用于包含python导入包之外的资源) 一种叫做setuptools scm(我相信它使用您的版本控制系统来查找资源,而不是manifest.in或其他东西) 哪些可以从importlib.resources访问? (据我所知,importlib.res
setup.py
中的包_数据(用于在python导入包中包含资源)setup.py
中的数据文件(用于包含python导入包之外的资源)setuptools scm
(我相信它使用您的版本控制系统来查找资源,而不是manifest.in或其他东西)- 哪些可以从
访问?importlib.resources
(据我所知,
是访问此类资源的首选方式。)如果无法通过importlib.resources
访问其中任何一种资源,那么如何能够/应该访问此类资源importlib.resources
- 其他在线用户因建议使用
查找资源路径而受到责骂,因为已安装的wheel分发版可能存储为zip文件,因此甚至没有正确的资源路径何时将控制盘提取到站点包中,何时保持压缩状态?\uuuuu file\uuuu
- 所有(1)-(3)项都会将文件放入您的包中(不知道(4))。
在运行时,
importlib.resources
将能够访问包中的任何数据。
至少使用Python3.9,它可以访问子目录中的资源。
以前,您必须通过添加\uuuu init\uuuu
使每个子目录成为一个包
至于为什么不使用\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu
:Pythons导入系统有一些奇怪的方法来解析包。例如,如果您使用ZIPAP,它可以在zip文件中查找它们。
您甚至可以为要求从中加载某些资源的包提供自定义加载程序。
谁知道这些资源在哪里?答案:importlib.resources
好了,轮子不是一个竞争者,因为它们是未包装的。谢谢您的回复!所以我想我是误解了……我想,当安装轮子(即zip文件)时,轮子在站点包中仍然是压缩的。然而,我从您的回答中了解到的是,轮子是提取的,不会保持压缩状态,因此使用
\uuuu file\uuuu
几乎只是一个问题,如果您使用的是ZIPAP,或者如果您的包将使用自定义加载程序导入。这是正确的吗?车轮已打开包装。只要做一个pip-v安装轮子
(恰巧是轮子那么说使用\uuuu file\uuuu
你知道的唯一问题是Zipapp和定制加载程序吗?据我所知。但是Ziapapp也包括冻结的模块(那些*.pyd文件)。如果您只想从通过源代码发行版或wheel发行版提供的模块中读取资源,则可能需要保存。但请注意,根据规范,导入系统的设置\uuuuuuuuuuuuuuuuuuuu
是可选的,请参阅,以获取相关信息!