前情提要
之前一直使用 Python 3.7 都是直接安装, 没有什么复杂步骤. 前段时间因为项目使用了一些新特性, 切换到 3.10 和 3.11 后发现, 只要涉及 HTTPS 请求就会报 SSL 模块错误.
本文介绍了如何解决这个问题, 并加以总结, 以便日后查阅.
安装依赖
| |
安装 OpenSSL
查看
openssl版本1openssl version一般 CentOS 7 自带的
openssl版本是1.0.2k之类的, 不符合python 3.10版本的要求, 所以直接安装python后一旦请求HTTPS链接就会报SSL模块错误.删除原
openssl1yum remove openssl更新 CentOS 信任根证书, 防止遇到
HTTPS不信任证书的问题1 2 3yum install ca-certificates update-ca-trust force-enable update-ca-trust extract下载最新
openssl并解压1 2 3wget https://www.openssl.org/source/openssl-1.1.1w.tar.gz tar -zxf openssl-1.1.1w.tar.gz cd openssl-1.1.1w需要注意, 本文发布时已经
openssl已经发布了3.x.x版本, 但没有测试该大版本与python的兼容性, 建议谨慎操作.配置并编译安装
1 2./config --prefix=/usr/local/openssl make -j && make install创建软链接并配置环境变量
1ln -sf /usr/local/openssl/bin/openssl /usr/bin/openssl用你喜欢的编辑器修改
/etc/ld.so.conf如vim /etc/ld.so.conf在文件末尾添加
/usr/local/openssl/lib
然后使配置生效
1ldconfig -v验证
在任意目录下输入
1openssl version可以正确输出新安装的版本即可

安装 Python 3.11
下载安装包并解压
1 2 3 4 5wget https://www.python.org/ftp/python/3.11.7/Python-3.11.7.tgz # 国内服务器可使用淘宝镜像 # wget https://registry.npmmirror.com/-/binary/python/3.11.7/Python-3.11.7.tgz tar xvzf Python-3.11.7.tgz cd Python-3.11.7更新 gcc (可选)
如果你希望编译 Python 时使用
--enable-optimizations参数, 也就是开启性能优化, 你需要留意你的 gcc 版本. 一般情况下 CentOS 7 的上 gcc 版本是很落后的 (一般是 4.8.5), 我们需要 >=8.1.0 版本.安装 gcc 10
1 2 3 4yum install centos-release-scl -y yum install devtoolset-10-gcc* -y # 自动安装在 /opt/rh/devtoolset-10 目录下安装完成后临时生效
1source /opt/rh/devtoolset-10/enable如需永久启用 gcc 10 可以删除旧版并软连接新版
1 2 3 4mv /usr/bin/gcc /usr/bin/gcc-4.8.5 ln -s /opt/rh/devtoolset-10/root/bin/gcc /usr/bin/gcc mv /usr/bin/g++ /usr/bin/g++-4.8.5 ln -s /opt/rh/devtoolset-10/root/bin/g++ /usr/bin/g++此时查看 gcc 版本应 >=10.2.1
1gcc -v
配置并编译
1 2./configure --prefix=/usr/local/python3.11 --with-openssl=/usr/local/openssl --with-openssl-rpath=auto --enable-optimizations make -j && make altinstall其中最重要的是
--with-openssl=/usr/local/openssl和--with-openssl-rpath=auto这两个关键参数决定了能否使用最新的openssl, 也是本文中最大的坑.如果
--enable-optimizations打开优化后编译失败或遇到Could not import runpy module错误, 可以考虑移除这个参数或参考上面步骤更新 gcc.创建软链接
1 2ln -sf /usr/local/python3.11/bin/pip3.11 /usr/bin/pip3.11 ln -sf /usr/local/python3.11/bin/python3.11 /usr/bin/python3.11验证
1 2python3.11 -V pip3.11 -V
建议
在使用 python 运行项目是, 推荐使用虚拟环境, 防止影响全局环境.
比如在 /www/program/some-project 这个项目中, 可以使用如下命令创建并使用虚拟环境
| |
此时, 终端前会显示 (venv), 即代表使用了当前的虚拟环境, 此时可以直接用 python 和 pip 命令而不是 python3.11 和 pip3.11. 使用 pip 安装的依赖也仅在当前虚拟环境中可用.
