centos 编译安装 Python 时遇到无法构建 SSL

步骤 1: 安装依赖

在编译 Python 之前,你需要确保你的系统安装了所有必须的构建依赖。在基于 Debian 的系统上,像 Ubuntu 这样的,可以这样做:

代码语言:javascript

复制

sudo apt update
sudo apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev \
libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev

对于基于 Red Hat 的系统,比如 CentOS 或者 Fedora,可以这样做:

代码语言:javascript

复制

sudo yum groupinstall "Development Tools"
sudo yum install zlib-devel bzip2-devel openssl-devel ncurses-devel \
sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel libffi-devel
步骤 2: 下载 Python 源码

可以从 Python 官方网站或其在 GitHub 的镜像库下载源码。使用 wget 从官方源下载的命令:

代码语言:javascript

复制

wget https://www.python.org/ftp/python/3.12.3/Python-3.12.3.tgz

然后解压下载的文件:

代码语言:javascript

复制

tar -xvzf Python-3.12.3.tgz

解压后,切换到源码目录:

代码语言:javascript

复制

cd Python-3.12.3
步骤 3: 配置编译选项

在编译之前,配置安装选项,可以使用 ./configure 脚本。可以指定诸如安装目录的选项(通过 --prefix 参数)和编译优化(在 Python 3.12,通过 --enable-optimizations 开启编译优化可能会显著提升 Python 性能但是会使编译过程更长)。

代码语言:javascript

复制

./configure --enable-optimizations --prefix=/usr/local/python3.12

这里,我们将 Python 安装到 /usr/local/python3.12,然后手动添加 Path,这样不会影响其他版本的 Python,比如 python2.

还有许多其他的配置选项,可以通过运行 ./configure --help 来查看它们。

步骤 4: 编译 Python

运行 make 命令来编译 Python:

代码语言:javascript

复制

make -j 8   # '8' 是编译时使用的核心数,根据你的系统调整

由于编译时间较长,我们可以使用 -j 选项会在编译时进行并行处理,以加快编译速度。这个数字最好设置为你的处理器核心数。

到这里,我们通常会遇到 ssl 报错:

代码语言:javascript

复制

Could not build the ssl module!
Python requires a OpenSSL 1.1.1 or newer

而操作系统上的 openssl 通常都是低于 1.1.1 的,遇到这种情况,就 openssl 官网下载新版本,编译安装,然后把相关的库收集到安装路径的 lib 目录即可。但是安装 openssl 通常也不是那么顺利的。根据以下步骤进行

代码语言:javascript

复制

mkdir ~/openssl
cd ~/openssl
wget https://www.openssl.org/source/openssl-3.3.0.tar.gz
tar -zxvf openssl-3.3.0.tar.gz
cd openssl-3.3.0
./config --prefix=/usr/local/ssl3.3 --openssldir=/usr/local/ssl3.3 shared zlib
make
make install

如果上述步骤在 config 步骤报错:Can't locate IPC/Cmd.pm in @INC ,则需要安装下面的依赖包:

代码语言:javascript

复制

sudo yum groupinstall 'Development Tools'
sudo yum install perl-core zlib-devel

上述的步骤将 openssl 安装在 /usr/local/ssl3.3 下面,我们可以在命令行(terminal)执行 /usr/local/ssl3.3/bin/openss version 如果执行报错,则需要指定 lib64 的路径 :

代码语言:javascript

复制

sudo vim sudo vim /etc/ld.so.conf.d/openssl.conf
# 加入内容 /usr/local/ssl3.3/lib64
sudo ldconfig

然后在执行 /usr/local/ssl3.3/bin/openss version 即可看到正确的版本信息。

但是编译 Python 之前,还有一个关键的步骤,就是需要在 /usr/local/ssl3.3/ 下创建一个 lib 文件,然后将相应的 so 文件放进去,通过执行下面的命令:

代码语言:javascript

复制

cd ~/openssl/openssl-3.3.0 # 确保再解压的目录中
mkdir /usr/local/ssl3.3/lib
cp ./*.{so,so.3*,a,pc} /usr/local/ssl3.3/lib
步骤 5: 再次配置、编译 Python

运行 make 命令来编译 Python:

代码语言:javascript

复制

./configure --with-openssl=/usr/local/ssl3.3 --prefix=/usr/local/python3.12
make -j 8   # '8' 是编译时使用的核心数,根据你的系统调整

这次就可以顺利完成编译了。

步骤 6: 安装 Python

一旦编译完成,运行以下命令以安装 Python:

代码语言:javascript

复制

sudo make install

我们不需要使用 altinstall 是因为我们指定了自己的安装目录 /usr/local/python3.12。如果不指定安装目录,为了避免替换掉系统的默认 Python 版本,可以使用 altinstall

步骤 6: 验证安装

安装完成后,可以通过调用新安装的 Python 版本来检查它:

代码语言:javascript

复制

/usr/local/bin/python3.12 --version

输出应该显示 Python 的版本号。进入 Python 后,执行 import ssl 验证安装。

代码语言:javascript

复制

$ /usr/local/python3.12/bin/python3
Python 3.12.3 (main, May 23 2024, 15:08:26) [GCC 4.8.5 20150623 (Red Hat 4.8.5-44)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ssl
>>> ssl.OPENSSL_VERSION
'OpenSSL 3.3.0 9 Apr 2024'
>>>

至此完成安装。

参考链接

Flask 学习-91.使用 gunicorn 部署 flask-腾讯云开发者社区-腾讯云

  • 25
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值