PyInstaller生成的.exe文件无法运行,提示缺少ipaddress模块求助
PyInstaller打包exe闪退与模块缺失问题解决
问题背景
使用PyInstaller打包Python脚本为.exe时,程序打开即闪退,CMD运行后出现模块缺失错误,同时.spec文件显示为通用文件。
脚本代码
import time name = input('what is your name?\n') print('fck you', name) time.sleep(1) import socket s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.connect(("8.8.8.8", 80)) print(s.getsockname()[0]) s.close()
.spec文件内容
# -*- mode: python ; coding: utf-8 -*- block_cipher = None a = Analysis( ['open.py'], pathex=[], binaries=[], datas=[], hiddenimports=[], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher, noarchive=False, ) pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher) exe = EXE( pyz, a.scripts, a.binaries, a.zipfiles, a.datas, [], name='open', debug=False, bootloader_ignore_signals=False, strip=False, upx=True, upx_exclude=[], runtime_tmpdir=None, console=True, disable_windowed_traceback=False, argv_emulation=False, target_arch=None, codesign_identity=None, entitlements_file=None, )
CMD运行错误提示
C:\Users\------\Desktop>open.exe [8072] Module object for pyimod02_importers is NULL! Traceback (most recent call last): File "PyInstaller\loader\pyimod02_importers.py", line 22, in <module> File "pathlib.py", line 14, in <module> File "urllib\parse.py", line 40, in <module> ModuleNotFoundError: No module named 'ipaddress' Traceback (most recent call last): File "PyInstaller\loader\pyiboot01_bootstrap.py", line 17, in <module> ModuleNotFoundError: No module named 'pyimod02_importers' [8072] Failed to execute script 'pyiboot01_bootstrap' due to unhandled exception!
解决步骤
1. 修复模块缺失问题
错误核心是ipaddress模块未被PyInstaller自动打包。尽管脚本未直接导入该模块,但urllib.parse依赖它,需手动添加到隐藏导入列表:
- 打开
.spec文件,修改hiddenimports参数为:hiddenimports=['ipaddress'],
2. 重新打包
在CMD中执行以下命令重新打包:
pyinstaller open.spec
3. 关于.spec文件的疑问
.spec文件是PyInstaller生成的配置文件,不需要额外下载。系统显示为通用文件是因为未关联合适的文本编辑器,直接用Notepad++、VS Code等文本编辑器打开即可编辑。
内容的提问来源于stack exchange,提问作者gabe
相关产品推荐
相关产品推荐

