python提示"ModuleNotFoundError: No module named '_ssl'"解决
1.编译 OpenSSL
本质: python编译版本依赖ssl不匹配导致的
1 | cd /usr/local/src |
编译:
1 | ./config --prefix=/usr/local/openssl-1.1 \ |
配置动态库:
1 | echo "/usr/local/openssl-1.1/lib" > /etc/ld.so.conf.d/openssl-1.1.conf |
验证:
1 | /usr/local/openssl-1.1/bin/openssl version |
应该看到:
OpenSSL 1.1.1w
2.重新编译 Python
先清理旧编译:
1 | cd /usr/local/src/Python-3.9.19 |
配置:
1 | ./configure \ |
编译:
1 | make -j$(nproc) |
配置库路径:
1 | echo "/usr/local/python3.9/lib" > /etc/ld.so.conf.d/python3.9.conf |
3.验证 ssl
1 | /usr/local/python3.9/bin/python3.9 -c "import ssl; print(ssl.OPENSSL_VERSION)" |
正常会看到:
OpenSSL 1.1.1w
然后再试:
1 | pip3 install requests |
就不会再出现:
urllib3 v2 only supports OpenSSL 1.1.1+
总结
在 CentOS7 上编译 Python,99% 稳定方案是:
gcc >= 7
openssl >= 1.1
python >= 3.9
依赖关系像这样:
graph TD GCC --> OpenSSL OpenSSL --> Python_ssl_module Python_ssl_module --> requests requests --> urllib3
任何一层太旧,都会出现奇怪报错。