Python打包为exe运行报ModuleNotFoundError缺cryptography模块如何解决
ModuleNotFoundError: No module named 'cryptography' 报错修复
这个报错是打包exe时依赖收集不全导致的,按以下步骤操作即可解决:
- 第一步先确认打包用的Python环境已经正确安装了cryptography库
打开你打包时用的终端/命令行,执行pip show cryptography,如果没有返回版本、安装路径信息,直接执行pip install cryptography完成安装。注意如果你用了虚拟环境、conda环境,必须先激活对应环境再执行安装和打包命令,不要把包装到其他无关环境里。 - 第二步打包时手动指定强制收集cryptography模块
如果你用PyInstaller打包,在原有打包命令后面加上--hidden-import=cryptography参数,示例命令:
如果执行完上面的命令打包后还是报cryptography相关的子模块缺失,就把报错里提到的具体子模块名也按同样格式加到命令里,比如缺fernet子模块就再加一个pyinstaller -F --hidden-import=cryptography main.py--hidden-import=cryptography.fernet。排错阶段打包建议不要加-w参数,方便直接在控制台看到完整报错信息。 - 如果你是用spec配置文件打包,直接找到配置里的
hiddenimports字段,把cryptography加进列表即可,示例配置:
改完配置后执行a = Analysis( 'main.py', pathex=[], binaries=[], datas=[], # 其他原有配置保持不变 hiddenimports=['cryptography'], hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=None, noarchive=False, )pyinstaller main.spec重新打包即可。 - 清理缓存后重新打包
如果之前打包失败过,先把脚本目录下生成的build、dist文件夹,还有和脚本同名的.spec文件全部删除,再执行打包命令,避免旧缓存导致依赖没有被正确打包进产物。
如果你用的是cx_Freeze、py2exe等其他打包工具,解决逻辑一致:先确认环境内已安装cryptography,再在打包配置的隐式导入/强制依赖收集项里加入cryptography即可。
内容的提问来源于stack exchange,提问作者Filo
相关产品推荐
相关产品推荐

