Py2App打包的Mac应用无法读取文本文件更新内容求助
解决py2app打包后无法读取文本文件更新内容的问题
问题根源
你直接用py2applet --make-setup searchscript3.py testdoc.txt打包时,testdoc.txt会被嵌入到.app包内部的Contents/Resources目录,成为打包时刻的静态副本。运行.app时,脚本读取的是包内的这个副本,而非外部你修改的文件,所以无法识别后续修改。
解决方案
1. 调整打包配置,将文本文件设为可更新资源
首先把文本文件放到单独的资源目录,让py2app正确复制它而非嵌入:
- 新建
resources文件夹,将testdoc.txt移入其中。 - 用
-r参数指定资源目录生成setup.py:
或者手动编辑生成的setup.py,确保py2applet --make-setup searchscript3.py -r resources/py2app选项包含资源配置:setup( app=['searchscript3.py'], options={ 'py2app': { 'resources': ['resources/'], } }, setup_requires=['py2app'], )
2. 修改脚本,读取正确的资源路径
打包后脚本不能用相对路径直接读取文件,需要区分开发环境和打包环境获取资源路径:
import os import sys def get_resource_path(relative_path): # 打包后sys._MEIPASS指向app内的Resources目录 if hasattr(sys, '_MEIPASS'): base_dir = sys._MEIPASS else: # 开发环境取脚本所在目录 base_dir = os.path.dirname(os.path.abspath(__file__)) return os.path.join(base_dir, relative_path) # 获取testdoc.txt的实际路径 txt_file = get_resource_path('resources/testdoc.txt') # 读取文件内容 with open(txt_file, 'r') as f: # 你的检索逻辑代码 for line in f: # 逐行处理检索 pass
3. 重新打包
执行打包命令生成新的.app:
python3 setup.py py2app
额外优化
如果希望用户更方便修改文本文件,可以把文件放在用户的Documents目录下,无需进入.app包操作:
# 直接指向用户Documents目录下的文件 txt_file = os.path.expanduser('~/Documents/testdoc.txt')
内容的提问来源于stack exchange,提问作者erduley
相关产品推荐
相关产品推荐

