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

Python脚本转EXE后os.walk方法无法正常工作的问题咨询

PyInstaller打包Python脚本为EXE的常见问题与解决办法

问题根源

你的脚本里用了os.path.realpath(__file__)获取当前脚本路径,但PyInstaller打包成EXE后,程序运行时会把代码解压到系统临时目录(比如C:\Users\<用户名>\AppData\Local\Temp\_MEIxxxxxx),__file__指向的是这个临时目录里的文件,而非EXE所在的实际目录,所以os.walk遍历的是临时目录,自然找不到目标HTML文件。

修复后的代码

替换路径获取逻辑,同时优化HTML文件的判断方式(避免无后缀或多后缀文件报错):

import sys
import os
from os import walk
from os.path import join


def get_html_file_path(file_path):
    htmlfile = []
    for root, dirs, files in walk(file_path):
        for f in files:
            # 用endswith更稳妥,还能兼容大写后缀的HTML文件
            if f.lower().endswith(".html"):
                fullpath = join(root, f)
                htmlfile.append(fullpath)
    return htmlfile


# 区分脚本运行和打包后的环境
if getattr(sys, 'frozen', False):
    # 打包成EXE后,获取EXE所在目录
    file_path = os.path.dirname(sys.executable)
else:
    # 脚本模式下,获取当前脚本所在目录
    full_path = os.path.realpath(__file__)
    file_path = os.path.dirname(full_path)

aaa = get_html_file_path(file_path)
print(aaa)

PyInstaller打包的核心注意事项

  • 路径处理:绝对不要依赖__file__获取程序运行目录,打包后它指向临时解压目录,必须用sys.executable(打包环境)和__file__(脚本环境)做分支判断。
  • 外部资源:如果程序需要读取外部文件(如HTML、配置),要么把资源和EXE放在同一目录,要么用--add-data参数将资源打包进EXE,运行时从临时目录读取。
  • 权限问题:若程序需要写入文件或遍历系统目录,可能需要右键以管理员身份运行EXE。
  • 控制台调试:调试阶段不要加--windowed参数,否则会隐藏控制台,看不到print输出的错误信息;GUI程序上线时再添加该参数。
  • 依赖库兼容:部分依赖动态链接库的模块,打包时需要用--hidden-import指定缺失模块,或者查看打包日志定位报错点。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:55:14