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

auto-py-to-exe/pyinstaller打包报base_library路径文件不存在错误

问题原因

PyInstaller 单文件(--onefile)模式打包的程序,启动时会把所有内置依赖、通过--add-data添加的资源解压到系统临时目录下的_MEIPASS专属文件夹中运行,并不会直接在exe所在目录读取资源。
你代码里用sys.path[0]拼接路径,在打包运行环境下这个值指向临时目录内的base_library.zip文件路径,根本不是附加资源的实际存放位置;同时你写的--add-data参数末尾分号后没有指定资源解压的目标目录,也会导致资源放置位置异常,最终触发文件找不到的报错。

解决方法

根据你实际的文件使用需求二选一即可:

  • 场景1:需要把txt文件打包进exe内部,用户不需要单独修改这个txt
    1. 替换原有路径获取逻辑,写兼容开发/打包环境的通用路径方法,代码如下:
      import os
      import sys
      
      def resource_path(relative_path):
          # 适配PyInstaller打包后的运行环境
          if hasattr(sys, '_MEIPASS'):
              return os.path.join(sys._MEIPASS, relative_path)
          # 开发环境下直接返回脚本同目录的对应路径
          return os.path.join(os.path.abspath(os.path.dirname(__file__)), relative_path)
      
      # 替换你原来的open路径写法
      with open(resource_path("file.txt")) as f:
          # 保留你原有的文件读取逻辑
          content = f.read()
      
    2. 修正auto-py-to-exe的附加文件配置:添加file.txt时,目标路径填写.,对应生成的--add-data参数在Windows下格式为C:/path/to/file.txt;.,不要留分号后的内容为空。
  • 场景2:需要把txt放在exe同目录,方便后续直接修改内容不需要重新打包
    1. 不要把file.txt通过--add-data参数添加到打包配置里。
    2. 路径获取逻辑替换为读取exe所在目录的写法,代码如下:
      import os
      import sys
      
      if getattr(sys, 'frozen', False):
          # 打包后取exe文件自身所在目录
          base_path = os.path.dirname(sys.executable)
      else:
          # 开发环境取脚本文件所在目录
          base_path = os.path.abspath(os.path.dirname(__file__))
      file_path = os.path.join(base_path, "file.txt")
      
      with open(file_path) as f:
          # 保留你原有的文件读取逻辑
          content = f.read()
      
    3. 打包完成后,把file.txt放到和生成的exe同层级的目录下即可正常运行。

内容的提问来源于stack exchange,提问作者Dovah Kiin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 08:33:11