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

使用PyInstaller打包含相对路径的Python代码遇路径问题求助

解决PyInstaller打包OneFile时相对路径失效问题

问题根源

使用--onefile打包时,PyInstaller会将所有文件解压到系统临时目录(如Windows的%temp%\_MEIxxxxxx),此时程序的工作目录不再是原项目的GUI子目录,导致../version.txt这类相对路径无法定位到项目根目录的文件。

解决方案

方案1:动态获取资源路径+打包时包含数据文件(推荐)

这种方法既支持开发环境调试,也能让打包后的exe独立运行,无需依赖原始项目文件。

步骤1:修改代码中的路径获取逻辑

在MainGUI.py中添加一个通用函数,自动适配开发/打包环境:

import os
import sys

def get_resource_path(relative_path):
    # 打包后,sys._MEIPASS指向临时解压目录
    if hasattr(sys, '_MEIPASS'):
        base_path = sys._MEIPASS
    else:
        # 开发环境中,当前脚本目录是GUI,上层目录为项目根
        base_path = os.path.dirname(os.path.abspath(__file__))
    
    # 拼接并标准化路径(处理../这类相对路径)
    return os.path.normpath(os.path.join(base_path, relative_path))

# 读取version.txt示例
version_file = get_resource_path("../version.txt")
with open(version_file, 'r') as f:
    version_content = f.read()

步骤2:打包时指定要包含的数据文件

在PyCharm终端的GUI目录下,执行带--add-data参数的打包命令:

# Windows系统用分号分隔源路径和目标路径
pyinstaller MainGUI.py --onefile --add-data "../version.txt;." --add-data "../Engines/*;Engines/" --add-data "../Controllers/*;Controllers/"
  • ../version.txt;.:将项目根目录的version.txt打包后放到临时目录根目录
  • ../Engines/*;Engines/:将Engines目录下所有文件打包后保留原目录结构

方案2:强制切换工作目录到项目根

如果你的exe始终放在原项目的GUI目录下运行,可直接修改代码切换工作目录:

import os
import sys

# 获取当前脚本所在的GUI目录
script_dir = os.path.dirname(os.path.abspath(__file__))
# 切换工作目录到项目根目录
os.chdir(os.path.join(script_dir, ".."))

# 此时可直接使用根目录相对路径读取文件
with open("version.txt", 'r') as f:
    version_content = f.read()

打包命令无需额外参数:pyinstaller MainGUI.py --onefile

注意:此方法下exe不能移动到其他目录,否则会找不到数据文件。

方案3:使用.spec文件配置打包(适合复杂项目)

生成并编辑spec文件,更精细地管理打包配置:

  1. 生成spec文件:
pyi-makespec MainGUI.py --onefile
  1. 打开MainGUI.spec,在datas列表中添加数据文件:
a = Analysis(
    ['MainGUI.py'],
    pathex=['./'],
    binaries=[],
    # 添加需要打包的数据文件,格式为(源路径, 目标路径)
    datas=[('../version.txt', '.'), ('../Engines/*', 'Engines'), ('../Controllers/*', 'Controllers')],
    ...
)
  1. 用spec文件打包:
pyinstaller MainGUI.spec

内容的提问来源于stack exchange,提问作者Anthony Nash

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 19:41:05