pyinstaller打包Python脚本时出现Crypto相关模块缺失如何解决?
PyInstaller 虚拟环境项目打包缺依赖问题解决方案
问题根因
你全局安装的PyInstaller优先级高于虚拟环境内的版本,即便激活了虚拟环境,执行pyinstaller命令时调用的仍然是全局程序,会优先读取全局依赖库,不会主动加载虚拟环境内安装的第三方包。Windows环境下如果之前在对应虚拟环境内安装过PyInstaller,会优先调用虚拟环境内的版本,因此没有路径适配问题。
通用修复步骤(解决Linux下打包缺第三方库问题)
- 激活当前项目的virtualenv虚拟环境
- 在虚拟环境内安装PyInstaller,覆盖全局命令调用优先级:
pip install pyinstaller
- 删除之前打包生成的
build、dist文件夹和后缀为.spec的缓存文件 - 无需额外指定
--paths参数,直接执行打包命令即可:
pyinstaller --onefile script.py
Crypto模块缺失专项修复
Crypto类包存在命名冲突历史遗留问题,旧版pycrypto已停止维护,和替代包pycryptodome容易出现导入识别异常,可按以下步骤修复:
- 在虚拟环境内卸载所有冲突的crypto相关包:
pip uninstall -y pycrypto pycryptodome pycryptodomex
- 重新安装官方维护的
pycryptodome包:
pip install pycryptodome
- 若仍提示Crypto相关模块缺失,打包时手动添加隐藏导入参数即可:
pyinstaller --onefile --hidden-import "Crypto.Util.Padding" --hidden-import "Crypto.Math" script.py
如果后续打包还出现其他模块缺失的报错,都可以用--hidden-import 缺失的模块名的参数格式添加即可解决。
内容的提问来源于stack exchange,提问作者WayneNani
相关产品推荐
相关产品推荐

