Mac端Python3.8导入pycrypto报语法错误但Linux正常原因排查
问题根因
pycrypto 2.6.1在2014年就已停止维护,官方放出的原始版本没有做完整的Python 3语法适配,报错里的except ValueError, IndexError:是Python 2的旧异常捕获语法,Python 3解释器本身就不识别这种写法,正常加载必然触发SyntaxError。
同Python版本跨平台表现不一致的核心原因,是两个环境装的pycrypto根本不是同一个构建包:
- Linux端如果是通过系统包管理器(apt、yum等)安装的pycrypto,主流发行版的维护者会给源里的老旧软件自行打兼容补丁,已经把这类Python 2语法改成了Python 3兼容的写法,所以导入不会报错。
- Mac端虚拟环境里装的是直接从PyPI拉取的官方原始未修补版pycrypto 2.6.1,源码里全是遗留的Python 2旧语法,被Python 3解释器加载时直接就抛语法错误。
你可以自己对比两个环境下site-packages/Crypto/PublicKey/RSA.py的第585行,Linux端的对应行肯定是修正后的except (ValueError, IndexError):,和Mac端的原始写法完全不同。
最优处理方式
直接替换成社区维护的兼容分支pycryptodome就行,它和pycrypto的API完全兼容,全平台做了统一的Python 3适配,不会再出跨平台不一致的问题,执行以下命令即可:
pip uninstall -y pycrypto pip install pycryptodome
别尝试手动给Mac上的pycrypto改源码打补丁,这个停更多年的库除了语法问题之外还有一堆未修复的安全漏洞和其他Python 3兼容坑,换维护版是最省事的方案。
内容的提问来源于stack exchange,提问作者Manish
相关产品推荐
相关产品推荐

