Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
打包python资源(Manifest.in vs package_data vs data_文件)_Python_Resources_Setuptools_Python Importlib - Fatal编程技术网

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

打包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

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

  • 文件中的Manifest.in(我不确定这是首选于包_数据还是数据_文件)
  • setup.py
    中的包_数据(用于在python导入包中包含资源)
  • setup.py
    中的数据文件(用于包含python导入包之外的资源)
  • 一种叫做
    setuptools scm
    (我相信它使用您的版本控制系统来查找资源,而不是manifest.in或其他东西)
    • 哪些可以从
      importlib.resources
      访问?

      (据我所知,
      importlib.resources
      是访问此类资源的首选方式。)如果无法通过
      importlib.resources
      访问其中任何一种资源,那么如何能够/应该访问此类资源

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

      • 所有(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
        是可选的,请参阅,以获取相关信息!