CentOS Python 3.12安装
<p>之前从来没想到我会在安装Python这点上卡住,事实上最近就是在一个CentOS测试机上安装Python时遇到了问题,因此记一下。</p><p>以往我们使用yum安装python时非常简单:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">yum install python
or
yum install python3
</pre>
</div>
<p>最多额外再加装个pip以及python-devel,就算需要某个特定的、yum无法覆盖的小版本,也只需要`configure && make && make install`就完事,毕竟其依赖与默认的python基本相似。</p>
<p>然而随着python版本的快速更迭,老旧的CentOS6、7系统自带的yum源已经无法覆盖新的python版本,其上许多依赖也已过时,这就需要我们手动编译安装python。</p>
<p><strong>1、openssl的问题</strong></p>
<div>
<p dir="auto">ssl是python的核心模块依赖之一,pip工具、安全加密等功能依赖于此。</p>
</div>
<div>
<p dir="auto">在CentOs6、7安装Python高版本时,所需的openssl版本高于系统默认的openssl 1.0.2k,因此我们需要到 https://github.com/openssl/openssl/tags 下载对应的openssl安装包,解压后进行编译安装:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">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版本</pre>
</div>
<p>需要特别注意的是:openssl建议使用--prefix的方式进行config,即在/usr/local目录下使用单独的子目录进行安装,否则python make时可能无法识别使用(或许需要指定--with-openssl=/usr/local)。</p>
</div>
<p><strong>2、readline/zlib等等依赖缺失怎么办?</strong></p>
<div>
<p dir="auto">除了比较重要的ssl之外,还会有一些Python标准库可能因为依赖缺失而在make时报出missing警告,虽然这样make出来的python也能用但遇到需要使用这些特定包时就会有问题,因此提前安装有必要。</p>
</div>
<div>
<p dir="auto">具体需要安装哪些包需要根据make的结果来看,可以先按下述语句安装一下,然后根据make结果再安装其他缺失的依赖。</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">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</pre>
</div>
<p>最后进行python编译安装:</p>
<div>
<p dir="auto">https://www.python.org/downloads/ 下载所需Python版本。</p>
</div>
<div>
<p dir="auto">解压后执行如下操作:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">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
</pre>
</div>
<p><strong>再补充一个pypi源的配置:</strong></p>
<p>在国内使用pypi拉取安装包通常比较慢,所以我们通常会使用BAT三家的pypi源:</p>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">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验证配置是否已生效</pre>
</div>
<div class="cnblogs_Highlighter">
<pre class="brush:csharp;gutter:true;">
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
</pre>
</div>
<p>多源分隔符为换行符。</p>
<div>
<p dir="auto">来自chatgpt的回复(未验证):从 pip 21.x 开始(尤其是 21.3 和更新的版本),pip在处理多个索引源时进行了改进,能够并行查询所有配置的镜像源以加速包安装过程,当在所有源中拉取到了相关包时使用最后一个进行安装。</p>
<p dir="auto">目前的感触是腾讯的pip源速度比较快比较全,当然也和我把他放在最后有关系。</p>
</div>
</div>
</div><br><br>
来源:https://www.cnblogs.com/realcp1018/p/18369408
頁:
[1]