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

Python脚本经auto-py-to-exe打包为exe后运行结果与原脚本不一致如何解决

问题根因

PyInstaller --onefile 单文件模式运行时,会先将全部程序依赖解压到系统临时目录的随机文件夹再执行代码,此时代码中的__file__变量指向的是临时目录下的编译后文件路径,而非exe文件实际存放的目录,因此你读取到的文件列表是临时目录的内容,和原脚本运行时读取脚本所在目录的逻辑完全不一致。

修复方案

方法1:修改代码适配多运行环境(推荐)

替换路径获取逻辑,新增打包运行环境的判断,同时补充路径拼接、跳过自身的兼容逻辑,修改后代码如下:

import os
import sys

# 兼容两种运行场景获取目标目录
if getattr(sys, 'frozen', False):
    # exe运行场景:取exe文件所在的目录
    current_dir = os.path.dirname(sys.executable)
else:
    # 本地py脚本运行场景:取当前脚本所在的目录
    current_dir = os.path.dirname(os.path.abspath(__file__))

files = os.listdir(current_dir)
for file in files:
    # 跳过exe自身,避免误操作
    if file == os.path.basename(sys.executable):
        continue
    split_tup = os.path.splitext(file)
    if split_tup[1] == '':
        # 拼接完整路径避免工作目录变动导致重命名失败
        old_path = os.path.join(current_dir, file)
        new_path = os.path.join(current_dir, f"{file}.jpg")
        os.rename(old_path, new_path)
# 阻止控制台自动关闭
a = input()

方法2:调整打包模式(可选)

如果不想修改代码,也可以去掉打包命令中的--onefile参数,用目录模式打包,此时路径逻辑和脚本运行时差异更小,但兼容性不如修改代码的方案,也不方便单文件分发。

打包命令调整说明

如果采用修改代码的方案,原有打包命令不需要任何改动,重新打包即可:
pyinstaller --noconfirm --onefile --console "C:/mypath/jpg_wizard.py"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.07 07:54:01