Python App Engine调用Endpoints工具时出现ImportError: cannot import name OSRNG
解决Google Cloud Endpoints生成OpenApi配置时的Crypto.Random导入错误
我之前跟着Google Cloud Endpoints教程操作时,也碰到过一模一样的问题!这本质是pycrypto库的版本或安装问题导致的——Endpoints工具依赖的旧版pycrypto模块结构,和现在常用的替代库pycryptodome不太匹配。给你几个可行的解决办法:
优先方案:重新安装指定版本的pycrypto
这个版本的pycrypto正好适配Endpoints工具的导入逻辑,操作步骤如下:- 先卸载可能冲突的相关库:
pip uninstall -y pycrypto pycryptodome - 安装2.6.1版本的pycrypto:
pip install pycrypto==2.6.1
这个版本里,
Crypto.Random.OSRNG是一个包含__init__.py的文件夹模块,旧的导入语句from Crypto.Random import OSRNG能正常工作,因为文件夹内的__init__.py会自动导出模块内容。- 先卸载可能冲突的相关库:
验证安装是否成功
打开Python交互环境,输入以下代码测试:from Crypto.Random import OSRNG print(OSRNG)如果没有抛出导入错误,就可以重新运行Endpoints生成OpenApi配置的命令了。
备选方案:临时修改导入语句(不推荐)
如果你因为系统环境限制没法安装指定版本的pycrypto,可以临时修改lib/Crypto/Random/__init__.py里的导入语句:
将原来的:from Crypto.Random import OSRNG修改为:
from Crypto.Random.OSRNG import *不过这个方法需要改动第三方库的源码,后续更新库时可能会被覆盖,所以只是应急用的办法。
内容的提问来源于stack exchange,提问作者Gil
相关产品推荐
相关产品推荐

