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

PyInstaller打包Python项目生成的可执行文件启动即闪退问题求助

问题根因定位

你遇到的闪退根本原因是NotADirectoryError路径缺失异常,和两条pkg_resources相关的警告无关:

  • 你使用的57.5.0版本setuptools已经废弃移除了pkg_resources.py2_warn、pkg_resources.markers两个模块,这两条警告是PyInstaller 4.x版本的兼容检测逻辑触发的,本身不影响程序运行,主动添加隐藏导入反而会因为找不到模块触发报错,直接去掉这两个--hidden-import参数即可。
修复步骤

步骤1:清理旧打包缓存

先删除项目根目录下的dist、build文件夹和main.spec文件,避免旧配置干扰后续打包。

步骤2:修正代码内的路径读取逻辑

你代码中存在直接用相对路径读取main/GUI目录下文件(如UI文件、资源图标等)的逻辑,PyInstaller打包后运行时的工作目录和开发环境不一致,需要统一适配两种运行场景的路径:
在你的main.py中加入如下工具函数,所有访问项目内文件的位置都通过该函数拼接路径:

import sys
import os

def get_resource_path(relative_path):
    if getattr(sys, 'frozen', False):
        # 打包后运行时,取PyInstaller临时解压目录作为根路径
        base_path = sys._MEIPASS
    else:
        # 开发时运行,取项目根目录为基准
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

使用示例:访问main/GUI/ui.py对应的路径写法为get_resource_path("main/GUI/ui.py")。

步骤3:调整打包命令,同步项目目录结构

执行如下打包命令,将整个main子目录作为数据文件打包到最终的可执行文件目录中,保持和开发时一致的目录结构:

pyinstaller --debug=all --add-data "main:main" main.py

Mac系统下--add-data参数格式为源目录:打包后目标目录,上述命令会把项目内的main文件夹整体复制到打包后的运行根目录下。

步骤4:验证运行结果

打包完成后不要直接双击运行可执行文件,打开终端进入dist/main目录,执行./main启动程序,所有运行日志会直接输出在终端中,可确认是否还有其他异常。

可选优化(消除警告)

如果需要消除两条pkg_resources相关警告,可将setuptools降级到45.0.0以下版本,无特殊需求可忽略该操作,警告本身不影响程序运行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 12:15:00