CentOS Python 3.12安装

之前从来没想到我会在安装Python这点上卡住,事实上最近就是在一个CentOS测试机上安装Python时遇到了问题,因此记一下。

以往我们使用yum安装python时非常简单:

yum install python
or
yum install python3

最多额外再加装个pip以及python-devel,就算需要某个特定的、yum无法覆盖的小版本,也只需要`configure && make && make install`就完事,毕竟其依赖与默认的python基本相似。

然而随着python版本的快速更迭,老旧的CentOS6、7系统自带的yum源已经无法覆盖新的python版本,其上许多依赖也已过时,这就需要我们手动编译安装python。

1、openssl的问题

ssl是python的核心模块依赖之一,pip工具、安全加密等功能依赖于此。

在CentOs6、7安装Python高版本时,所需的openssl版本高于系统默认的openssl 1.0.2k,因此我们需要到 https://github.com/openssl/openssl/tags 下载对应的openssl安装包,解压后进行编译安装:

cd openssl-1.1.1w
./config --prefix=/usr/local/openssl
make
make install
ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl  # 覆盖原先的openssl(也可以先备份下原先的openssl指令),无需担心yum/ssh等工具失效,这些工具使用的是/usr/lib64中的.so库,不是这个openssl指令
echo "export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/openssl/lib">>/etc/profile
openssl version  # 验证新的openssl版本

需要特别注意的是:openssl建议使用--prefix的方式进行config,即在/usr/local目录下使用单独的子目录进行安装,否则python make时可能无法识别使用(或许需要指定--with-openssl=/usr/local)。

2、readline/zlib等等依赖缺失怎么办?

除了比较重要的ssl之外,还会有一些Python标准库可能因为依赖缺失而在make时报出missing警告,虽然这样make出来的python也能用但遇到需要使用这些特定包时就会有问题,因此提前安装有必要。

具体需要安装哪些包需要根据make的结果来看,可以先按下述语句安装一下,然后根据make结果再安装其他缺失的依赖。

yum -y groupinstall "Development Tools"
yum -y install bzip2-devel gdbm-devel xz-devel readline-devel ncurses-devel tk-devel libuuid-devel libffi-devel

 

最后进行python编译安装:

https://www.python.org/downloads/ 下载所需Python版本。

解压后执行如下操作:

cd Python-3.12.4
./configure --prefix=/usr/local/python3.12 --with-openssl=/usr/local/openssl
# 加prefix的作用是把python安装到/usr/local/python3.12目录下而非默认的/usr/local目录下,类似于解压到当前目录和解压到指定目录的区别,不过默认的/usr/local下组织的也很合理,因此不加也行
# 指定--prefix后,python的bin,lib等目录等会全部集中在/usr/local/python3.12目录下,未指定时则直接位于/usr/local目录下
# --with-openssl建议加上,这个参数指定的是openssl的安装根目录,在使用非默认ssl组件时很有用
make
make install
ln -s /usr/local/python3.12/bin/python3.12 /usr/bin/python3

  

posted @ 2024-08-20 14:46  realcp1018  阅读(351)  评论(0编辑  收藏  举报