pyinstaller no module named “”

本文记录了解决使用PyInstaller将Python脚本打包成Windows EXE文件时遇到的“找不到名为message的模块”错误的过程。通过逐步导入缺失的依赖库,最终成功生成可执行文件。

环境:window7 64位,pyinstaller 3.3.1 ,python2.7.14

在pip install pyinstaller之后想把文件打包成exe文件,但是出现下面的错误,说 no module named message,下面就开始各种百度,各种找,下面一一列举所尝试的工作。

首先大家进到python安装目录,打开到下面图片的目录,会看到有一个message.py的文件,所以尝试方法(1),但是还是报错:

实际上,报错所说的no module named message并不是上面图中的那个message.py文件,而是下图mime子文件夹里面的message.py文件,知道这个以后,估计问题就很好解决了。


注:路径一定不要包含中文,切记切记;另外一定要以管理员身份打开cmd或者powershell窗口,不然可能会出现ascii编码问题。

先在cmd窗口进入到py文件目录下,

(1)说缺包,那咱们就补上,于是就输入  pyinstaller -F httpRoute.py --hidden-import message--clean 导入隐藏的包,运行之后结果还是如上图所示。

(2)在stackoverflow上找到一个大神的提问,照着输入pyinstaller --name=httpRoute --windowed "F:\project_cx\wanggong\httpRoute.py" -y --hiddenimport email.mime.message --clean  --onedir  结果运行之后还是报错,这就奇怪了明明是同样的问题,怎么我试就不行了呢,直到后面我才发现他后面跟了一个 --onedir,这个参数的意思就是将生成的exe文件放到现在cmd所处的目录环境下,因为我的路径包含中文所以才报错的,注意尽量少用中文,免得出现麻烦。

(3)经过多次尝试,在cmd窗口,将路径切换到py文件目录后,输入pyinstaller -F httpRoute.py --hidden-import email.mime.message --clean,运行完成以后,双击exe文件还是报错,但是这一次不是 no module named message的错误了,是报no module named image错误,一看到这个错误我简直欣喜若狂,看来这个问题有眉目了呀;然后继续导入隐藏包,输入pyinstaller -F httpRoute.py --hidden-import email.mime.message --hidden-import email.mime.image  --clean ,又没成功说又缺包,然后继续导,陆陆续续下来,在输入pyinstaller -F httpRoute.py --hidden-import email.mime.message --hidden-import email.mime.image --hidden-import email.mime.text --hidden-import email.mime.multipart --hidden-import email.mime.audio --hidden-import email.mime.base --hidden-import email.mime.application --hidden-import email.mime.nonmultipart --clean之后,终于成功了。真的是开心。

(4)因为已经测试成功,并且不需要弹出cmd窗口,所以加个参数-w,pyinstaller -F -w httpRoute.py --hidden-import email.mime.message --hidden-import email.mime.image --hidden-import email.mime.text --hidden-import email.mime.multipart --hidden-import email.mime.audio --hidden-import email.mime.base --hidden-import email.mime.application --hidden-import email.mime.nonmultipart --clean生成exe文件以后,发给过别人,并且测试成功。

小结:这个问题一直困扰了我一整天,期间我是看各种文档说导这个那个库,降pyinstaller版本,但是最后还是没能解决,看到stackoverflow那个文档以后还弄了一下午,弄这么长时间的原因就是一个是包含中文,不知道中文路径竟然还会报错,另外一个原因是对于导入库的理解还不是很深,没能理解 import email.mime.message是什么意思,反而觉得这个东西很奇怪。实际上我们在写py程序的时候经常会import pandas等等,然后使用pandas里面的库,使用 pandas.DataFrame等,也都用过,不过一直在用并没有理解其内在的含义,所以才会造成这种情况。

后面觉得上面的有点长,尝试了以下几种,不过都没有成功:

(1)使用pyinstaller -F httpRoute.py --hidden-import email.mime --clean,尝试导入email.mime里面的所有库(包含message),但是报错。

(2)pyinstaller -F -p D:\python\Lib\email\mime F:\project_cx\wanggong\httpRoute.py --clean 这个语句也是一样想整个导入,但是报错。

-p参数是导入包的目录

建议:在将文件打包成exe文件时,没有用到的模块尽量删除掉,不然会导致exe文件很大。




<think>我们面对的是一个Windows 11环境下使用PyInstaller打包的exe文件执行时报错的问题。 错误信息:failed to execute script pyi_rth_multiprocessing due to unhandled exception No module named '_socket' 分析: 1. 错误发生在执行打包后的exe时,具体是在运行PyInstaller的运行时钩子(hook)脚本`pyi_rth_multiprocessing`时。 2. 异常信息为:没有名为`'_socket'`的模块。`_socket`是Python标准库中用于socket操作的底层模块,通常由C语言编写,是内置模块。 可能的原因: - 在打包过程中,PyInstaller可能没有正确地包含这个模块或者相关的依赖。 - 使用了多进程(multiprocessing)模块,而PyInstaller在打包多进程程序时需要特殊处理。 - 系统环境问题,比如Python安装不完整或者有损坏。 解决方案: 1. 确保使用最新版本的PyInstaller:旧版本可能有已知的问题,更新到最新版本可能解决。 ``` pip install --upgrade pyinstaller ``` 2. 在打包时添加`--hidden-import`选项:有时候PyInstaller不能自动检测到某些模块,需要手动指定。 尝试在打包命令中加入: ``` pyinstaller --hidden-import=_socket your_script.py ``` 3. 使用PyInstaller的多进程打包补丁:在Python脚本的开头添加以下代码(适用于Windows): ```python import sys import multiprocessing if sys.platform.startswith('win'): # Windows系统需要特殊处理 multiprocessing.freeze_support() ``` 4. 检查Python环境:确保你的Python环境是完整的,没有损坏。可以尝试重新安装Python。 5. 如果上述方法无效,可以尝试在打包时排除multiprocessing钩子,然后自己处理多进程问题(不推荐,除非你知道你在做什么): ``` pyinstaller --exclude-module=pyi_rth_multiprocessing your_script.py ``` 但这样可能会导致多进程功能出现问题。 6. 有用户反馈,在Windows上使用PyInstaller打包多进程程序时,需要在命令中加入`--win-private-assemblies`参数,以防止加载系统路径下的DLL: ``` pyinstaller --win-private-assemblies your_script.py ``` 7. 另外,确保在打包时使用正确的Python环境,避免使用虚拟环境时缺少系统依赖。 根据错误信息,重点在于缺少`_socket`模块,因此首先尝试通过`--hidden-import`来包含这个模块。 注意:`_socket`是一个内置模块,正常情况下PyInstaller应该能自动找到。如果出现这个问题,可能是打包过程中出现了异常。 因此,建议先尝试更新PyInstaller,然后再添加隐藏导入。 如果问题仍然存在,可以查阅PyInstaller的issue页面,看是否有类似的问题报告。 现在按照要求,在回答末尾提出3-5个相关问题。 </think>### 问题分析: 在 Windows 11 上运行 PyInstaller 打包的 EXE 文件时,报错 `failed to execute script pyi_rth_multiprocessing due to unhandled exception No module named '_socket'`,主要原因是 PyInstaller 在打包过程中未能正确处理 Python 的多进程模块依赖(`multiprocessing`),导致底层 Socket 模块缺失。以下是解决方案: --- ### 解决方法: #### ✅ 方案 1:添加 `--hidden-import` 参数重新打包 在打包命令中显式引入缺失的模块: ```bash pyinstaller --hidden-import=_socket --clean --onefile your_script.py ``` - `--hidden-import=_socket`:强制包含 `_socket` 模块 - `--clean`:清除缓存避免干扰 #### ✅ 方案 2:升级 PyInstaller 和依赖库 旧版本 PyInstaller 可能对多进程支持不完善: ```bash pip install --upgrade pyinstaller pywin32 ``` #### ✅ 方案 3:添加多进程启动补丁 在 Python 脚本开头添加以下代码: ```python import sys import multiprocessing if sys.platform.startswith('win'): multiprocessing.freeze_support() # 修复 Windows 多进程问题 ``` #### ✅ 其他注意事项: 1. **检查 Python 环境**:排除虚拟环境冲突(建议使用系统 Python 打包)。 2. **关闭杀毒软件**:部分杀软会拦截 PyInstaller 生成的 EXE 文件。 3. **使用管理员权限**:以管理员身份运行 CMD/PowerShell 执行打包命令。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值