打包python资源(Manifest.in vs package_data vs data_文件)

2024-05-18 08:45:06 发布

您现在位置:Python中文网/ 问答频道 /正文

python发行包中似乎包含了非python资源,这是4种方式之一:

  1. 文件中的Manifest.in(我不确定这是首选于包_数据还是数据_文件)
  2. {}中的包_数据(用于在python导入包中包含资源
  3. setup.py中的数据_文件(用于在python导入包之外包含资源)
  4. 叫做setuptools-scm的东西(我相信它使用版本控制系统来查找资源,而不是manifest.in或其他东西)
  • 哪些可以从^{访问?
    (我的理解是,importlib.resources是访问此类资源的首选方式。)如果其中任何一种无法通过importlib.resources访问,那么如何能够/应该访问此类资源

  • 其他在线用户因为建议使用__file__查找资源路径而受到责骂,因为已安装的wheel分发版可能存储为zip文件,因此甚至没有正确的资源路径何时将控制盘提取到站点包中,何时保持压缩状态?


Tags: 文件数据inpy路径版本方式setup
1条回答
网友
1楼 · 发布于 2024-05-18 08:45:06

所有(1)-(3)项都会将文件放入包中(不知道(4))。 在运行时,importlib.resources将能够访问包中的任何数据。 至少使用Python3.9,它可以访问子目录中的资源。 以前,您必须通过添加__init__使每个子目录成为一个包

至于为什么不使用__file__:Pythons导入系统有一些奇怪的方法来解析包。例如,如果您使用ZIPAP,它可以在zip文件中查找它们。 您甚至可以为要求从中加载某些资源的包提供自定义加载程序。 谁知道这些资源在哪里?答案:importlib.resources

顺便说一句,轮子不是一个竞争者,因为它们是未包装的

相关问题 更多 >