微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

打包python资源Manifest.in与package_data与data_files

如何解决打包python资源Manifest.in与package_data与data_files

似乎python分发软件包中包含了非python资源,这是以下4种方法之一:

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

  • 由于建议安装__file__来查找资源的路径,因此网上其他人遭到了指责,因为已安装的车轮分布可能存储为zip文件,因此甚至没有正确的路径您的资源。 何时将轮子提取站点包装中,何时保持压缩状态?

解决方法

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

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

Afaik,车轮拆开后,它们不是竞争者。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。