You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Py2App打包的Mac应用无法读取文本文件更新内容求助

解决py2app打包后无法读取文本文件更新内容的问题

问题根源

你直接用py2applet --make-setup searchscript3.py testdoc.txt打包时,testdoc.txt会被嵌入到.app包内部的Contents/Resources目录,成为打包时刻的静态副本。运行.app时,脚本读取的是包内的这个副本,而非外部你修改的文件,所以无法识别后续修改。

解决方案

1. 调整打包配置,将文本文件设为可更新资源

首先把文本文件放到单独的资源目录,让py2app正确复制它而非嵌入:

  • 新建resources文件夹,将testdoc.txt移入其中。
  • 用-r参数指定资源目录生成setup.py:
    py2applet --make-setup searchscript3.py -r resources/
    
    或者手动编辑生成的setup.py,确保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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.06 12:45:34