Python 管理pyz应用程序中的资源

Python 管理pyz应用程序中的资源,python,zipapp,Python,Zipapp,我有一个多模块的python应用程序,我用python3-Mzipapp打包在pyz可执行文件中 我想使用运行一些文本文件所需的一些资源部署此应用程序。我尝试将这些文本文件添加到project_root/res中,然后执行类似于open./res/resource1.txt的操作,r as f:do_something,但当然找不到该文件 如何读取zipapp应用程序中嵌入的文本文件 import pkgutil pkgutil.get_data(<module name>, 're

我有一个多模块的python应用程序,我用python3-Mzipapp打包在pyz可执行文件中

我想使用运行一些文本文件所需的一些资源部署此应用程序。我尝试将这些文本文件添加到project_root/res中,然后执行类似于open./res/resource1.txt的操作,r as f:do_something,但当然找不到该文件

如何读取zipapp应用程序中嵌入的文本文件

import pkgutil
pkgutil.get_data(<module name>, 'resource1.txt')
同样,如果您愿意,这些文件可以是空白的,它们必须存在,尽管如果您确实在其中放入代码,那么您可以导入res或import res.some_子文件夹,它将运行res/uuu init_uuu.py,如果您愿意这样做,这可能是从一个位置组织所有资源的有用方法。顺便说一句,如果有人读到这篇文章,像大多数Python程序员一样,不熟悉模块的工作方式,那么这是Python文档中的一个快速教程

此外,如果您只是使用ZIPAP而不是使用pyinstaller创建的exe,您可以简单地:

 import sys
 import zipfile
 
 with zipfile.ZipFile(sys.argv[0]) as zf:
      with zf.open('res/resource1.txt') as f:
           print(f.read())

请问如何使用字节对象?我需要读取该txt文件的每一行,但我无法使用该bytes对象进行读取@WalleFan必须使用lines=bytes\u对象。解码“ascii”。拆分行或line=bytes\u行。解码“utf-8”。如果是utf-8,则拆分行以将bytes对象转换为字符串列表。
 import sys
 import zipfile
 
 with zipfile.ZipFile(sys.argv[0]) as zf:
      with zf.open('res/resource1.txt') as f:
           print(f.read())