Ubuntu系统PIP命令无法使用,因OpenSSL库陷入安装循环求助
解决Ubuntu下PIP与OpenSSL循环依赖及SSL_ST_INIT属性错误
嘿,我之前也碰到过这个一模一样的困境——想用pip装东西却缺OpenSSL,装OpenSSL又绕回pip,好不容易不用pip装了还出SSL_ST_INIT的属性错误!别慌,咱们一步步拆解解决:
第一步:清理可能损坏的现有OpenSSL相关Python包
首先得把之前可能安装失败或者版本不兼容的PyOpenSSL和依赖库清掉,避免冲突:
pip uninstall -y pyopenssl cryptography # 如果是Python2环境,改用pip2执行 pip2 uninstall -y pyopenssl cryptography
如果提示找不到包也没关系,说明本来就没装或者已经损坏,继续下一步即可。
第二步:用系统包管理器安装底层OpenSSL依赖(打破循环)
这是跳出pip循环的关键——直接用Ubuntu自带的apt安装系统级的OpenSSL开发库和Python的SSL绑定,这些包完全不依赖pip,能补全底层运行环境:
sudo apt update sudo apt install -y libssl-dev python-openssl python-dev # 针对Python2.7环境,确保安装对应版本的包 sudo apt install -y libssl-dev python2.7-openssl python2.7-dev
第三步:重新安装PyOpenSSL(环境正常后再操作)
现在系统依赖已经补全,再用pip安装PyOpenSSL就不会有循环问题,也能避免SSL_ST_INIT的属性错误:
pip install pyopenssl # Python2环境用pip2执行 pip2 install pyopenssl
如果担心版本兼容性,可以指定一个适配Python2.7的稳定版本:
pip2 install pyopenssl==19.1.0
关于SSL_ST_INIT错误的原因
这个错误大多是因为PyOpenSSL版本与系统底层OpenSSL库不匹配,或是安装PyOpenSSL时没有正确链接到系统的OpenSSL开发包——也就是咱们第二步补装的那些依赖。之前你绕开pip安装的PyOpenSSL,大概率是源码编译时没找到正确依赖,导致部分模块未生成,自然就找不到SSL_ST_INIT这个属性了。
内容的提问来源于stack exchange,提问作者Odai Nasser
相关产品推荐
相关产品推荐

