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

py2exe打包生成的可执行文件运行中断无报错问题求助

问题排查与解决方案

核心原因

你新增了scipy.interpolate相关导入,但py2exe无法自动识别该模块的底层Cython依赖,导致打包后的exe运行时缺模块崩溃,且未输出可见报错。同时你原有setup.py存在重复导入setup的冲突问题,可能导致配置不生效。

具体修复步骤

  • 第一步:修复setup.py配置,补充缺失依赖
    删除重复的setup导入,同时在includes列表中补充scipy.interpolate相关的底层依赖项,修改后的setup.py参考如下:
from distutils.core import setup
import py2exe

excludes = []
includes = [
    "scipy.signal","scipy._lib.messagestream",
    "scipy.spatial.transform._rotation_groups",
    "scipy.special.cython_special","pywt._extensions._cwt",
    # 新增interpolate相关依赖
    "scipy.interpolate", "scipy.interpolate._interp",
    "scipy.interpolate._bsplines", "scipy.linalg",
    "scipy.linalg._blas_subroutine_wrappers"
]

opts = {
    "py2exe": {
        "includes":includes,
        "excludes":excludes,
        # 可选:直接指定要打包的包,减少漏依赖概率
        "packages": ["numpy", "scipy", "pandas", "pywt"]
    }
}

setup(console=['Shweep.py'], options=opts)
  • 第二步:添加全局异常捕获,输出错误日志
    在你的主脚本Shweep.py最顶部加入以下代码,将运行时错误输出到本地日志文件,方便定位具体问题:
import sys
import traceback

# 将错误输出重定向到日志文件
sys.stderr = open("py2exe_error.log", "w", encoding="utf-8")

def main():
    # 你原来的所有主逻辑代码放在这里
    pass

if __name__ == "__main__":
    try:
        main()
    except Exception as e:
        traceback.print_exc()
        sys.stderr.flush()
  • 第三步:处理动态链接库缺失问题
    如果你使用conda安装的numpy、scipy,打包后需要将对应环境下的MKL相关dll(如libiomp5md.dll、mkl_core.dll等)复制到exe所在的dist目录,或者在setup.py中通过data_files配置自动打包。
  • 第四步:测试打包结果
    重新运行python setup.py py2exe打包,运行exe后如果崩溃查看生成的py2exe_error.log,根据日志中的缺失模块提示补充到includes列表即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 13:24:07