打包 Python 程序时,出现“没有名为XXX的模块”错误解决办法
来源:     阅读:2
易浩激活码
发布于 2025-11-11 20:24
查看主页

在使用 PyInstaller或auto-py-to-exe(或其他打包软件)打包 Python 程序时,某些依赖模块没有被正确识别或包含进打包后的程序中,启动打包后的 exe 文件,一般会报错误,列如下图的报错:

打包 Python 程序时,出现“没有名为XXX的模块”错误解决办法

打包后启动程序,报告的确 XXX模块

Unhandled exception in script

Failed to execute script 'main' due to unhandled exception: No module named 'scipy._cyutility'

Traceback (most recent call last):
  File "main.py", line 4, in <module>
  File "PyInstallerloaderpyimod02_importers.py", line 457, in exec_module

一、错误缘由

这是在使用 PyInstaller(通过 auto-py-to-exe)打包 Python 程序时,某些依赖模块没有被正确识别或包含进打包后的程序中所导致的典型问题。具体来说,scipy._cyutility 是 scipy 的一个内部 C 扩展模块,在打包过程中未被自动检测到。如果你遇到的是其他模块,大致也是类似情况。

二、传统解决解决办法

方法一:添加缺失的隐藏导入(Hidden Imports)

scipy._cyutility 属于“隐藏导入”,即 PyInstaller 无法从代码中静态分析出需要导入这个模块,因此不会将其打包进去。

你需要告知 PyInstaller 显式地将它加入打包列表。

1. 在 auto-py-to-exe 中添加 Hidden Import:

打开 auto-py-to-exe。

在 “Advanced PYZ and EXE settings (optional)” 部分找到 "Add additional packages to include" 或 "Additional hidden imports"。

输入以下内容(也可以多行输入多个模块),然后重新打包

scipy._cyutility

方法二:手动修改 .spec 文件(适用于高级用户)

如果你是通过生成 .spec 文件来打包的,可以编辑该文件:

# 在 Analysis 阶段添加 hiddenimports
a = Analysis(
    ...
    hiddenimports=['scipy._cyutility', 'scipy.sparse._csparsetools', 'scipy._lib.messagestream'],
    ...
)

然后重新打包。

三、超简单有效的解决办法

直接在 py 文件中,显性导入缺少的模块,重新打包即可。如图:

打包 Python 程序时,出现“没有名为XXX的模块”错误解决办法

显性导入缺少的模块

最后:有时候,像 tqsdk、pandas、numpy、matplotlib、scipy 这类库会引入许多动态导入和 C 扩展模块,PyInstaller 默认并不会全部包含进来。所以提议你在打包这类项目时,提前准备好一份 hidden import 列表 或者 在 py 文件中把它们都显性导入进来

打包 Python 程序时,出现“没有名为XXX的模块”错误解决办法

你学会了吗?

(汇报完毕,感谢收看!)

免责声明:本文为用户发表,不代表网站立场,仅供参考,不构成引导等用途。 系统环境
相关推荐
AE-CS6最全特效中英翻译
贪玩蓝月传奇是骗人的呼吁广大玩家不要受骗
有趣的Linux命令
JavaScript中的5个实用窍门
分布式系统接口安全三板斧实战指南:限流、防重放、签名验证
首页
搜索
订单
购物车
我的