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
source /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 sqlite-devel

最后进行python编译安装:

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

解压后执行如下操作:

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

再补充一个pypi源的配置:

在国内使用pypi拉取安装包通常比较慢,所以我们通常会使用BAT三家的pypi源:

vi ~/.config/pip/pip.conf
# 也可以用:~/.pip/pip.conf
# Windows下路径为 C:\Users\%USERNAME%\AppData\Roaming\pip\pip.ini, 或全局配置路径:C:\ProgramData\pip\pip.ini
# 使用pip config list验证配置是否已生效
[global]
index-url = https://mirrors.aliyun.com/pypi/simple/
extra-index-url =
    https://mirror.baidu.com/pypi/simple
    https://mirrors.tencent.com/pypi/simple/
timeout = 3
trusted-host =
    mirrors.aliyun.com
    mirror.baidu.com
    mirrors.tencent.com
root-user-action = ignore

多源分隔符为换行符。

来自chatgpt的回复(未验证):从 pip 21.x 开始(尤其是 21.3 和更新的版本),pip在处理多个索引源时进行了改进,能够并行查询所有配置的镜像源以加速包安装过程,当在所有源中拉取到了相关包时使用最后一个进行安装。

目前的感触是腾讯的pip源速度比较快比较全,当然也和我把他放在最后有关系。

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