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

PyInstaller打包后subprocess无法找到已添加的file.exe求助

问题分析与解决方法

核心原因

你猜的完全正确——当使用--onefile模式打包时,PyInstaller会把所有依赖文件(包括你的file.exe)打包进单个exe,运行时自动解压到系统临时目录(比如Windows的%temp%\_MEIxxxxxx随机命名目录),而不是你运行生成exe的当前工作目录。你的脚本里用.\file.exe是在当前工作目录查找文件,自然找不到。

修复代码

修改你的Python脚本,获取PyInstaller运行时的临时解压路径,拼接出file.exe的正确位置:

import subprocess
import os
import sys

# 获取PyInstaller onefile模式下的临时解压目录
def get_resource_path(relative_path):
    try:
        # 运行打包后的exe时,sys._MEIPASS指向临时解压目录
        base_path = sys._MEIPASS
    except Exception:
        # 直接运行py脚本时,用当前脚本所在目录
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

# 拼接file.exe的正确路径
proc = get_resource_path("file.exe")

CLI_VERSION = subprocess.check_output([proc, '-v'], shell=True).decode('utf-8').strip()
print(CLI_VERSION)

打包命令调整

使用--add-binary参数(针对二进制文件更规范),命令如下:

pyinstaller.exe --onefile --add-binary ".\file.exe;." .\myfile.py

;是Windows下的路径分隔符,Linux/macOS环境替换为:即可。

查看exe包内文件的方法

  • 用7-Zip直接打开:onefile模式生成的exe本质是自解压归档,右键选择7-Zip→打开压缩包,就能查看内部所有文件。
  • pyinstxtractor:你已经在用的工具,解压后会把所有打包文件提取到对应目录,方便验证文件是否被正确添加。
  • PyInstaller调试模式:打包时添加--debug all参数,运行生成的exe会输出详细日志,包括临时目录路径和文件解压情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 08:47:21