Pyinstaller无法加载Crypto.Cipher.__raw_ecb原生模块问题求助
解决PyInstaller无法加载Crypto.Cipher.__raw_ecb的问题
嘿,这个问题我之前踩过坑!PyInstaller打包时遇到Crypto原生模块加载失败的情况,大多是库兼容性或者打包配置的问题,给你几个实测有效的解决办法:
替换维护活跃的加密库
老版的PyCrypto已经停止维护好多年了,和PyInstaller的兼容性拉胯得很。先把旧库卸载干净:pip uninstall crypto pycrypto -y然后安装它的替代分支PyCryptodome,这个库完全兼容原有API,还修复了大量打包相关的bug:
pip install pycryptodome替换后你的代码不需要做任何修改,因为它依然使用
Crypto这个包名。给PyInstaller指定隐藏导入
有时候PyInstaller的自动依赖检测会漏掉这类原生模块,你可以在打包时直接指定要导入的模块:pyinstaller --hidden-import Crypto.Cipher.__raw_ecb 你的脚本文件名.py如果已经生成了
.spec配置文件,也可以手动编辑它,在hiddenimports列表里添加这个模块:a = Analysis( ['你的脚本文件名.py'], pathex=[], binaries=[], datas=[], hiddenimports=['Crypto.Cipher.__raw_ecb'], # 加上这行 hookspath=[], hooksconfig={}, runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=None, noarchive=False )之后用spec文件重新打包:
pyinstaller 你的脚本文件名.spec确保Python位数和库版本匹配
从你的错误路径能看到用的是32位Python(python36-32),如果安装的加密库是64位版本,就会出现加载失败。可以卸载后重新安装适配32位的版本:pip install pycryptodome --no-binary :all:这个命令会强制从源码编译,生成适配当前Python位数的库文件。
内容的提问来源于stack exchange,提问作者user488476
相关产品推荐
相关产品推荐

