Linux编译安装Python3.11

CentOS安装脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
#设置环境变量
PYTHON_URL=https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz
PYTHON_PKG=$(basename $PYTHON_URL)
PYTHON_DIR=$(basename $PYTHON_PKG .tgz)

#可以解决后期出现的方向键、删除键乱码问题,这里提前避免。
yum install -y readline-devel
#安装EPEL源
yum install -y epel-release
#安装源码编译需要的编译环境
yum install -y gcc zlib zlib-devel libffi libffi-devel

#CentOS7安装openssl11,后期的pip3安装网络相关模块需要用到ssl模块。
yum install -y openssl-devel openssl11 openssl11-devel
#设置编译FLAG,以便使用最新的openssl库
export CFLAGS=$(pkg-config --cflags openssl11)
export LDFLAGS=$(pkg-config --libs openssl11)

#CentOS9使用openssl
#yum install -y openssl-devel
#export CFLAGS=$(pkg-config --cflags openssl)
#export LDFLAGS=$(pkg-config --libs openssl)

#下载最新的软件安装包
wget $PYTHON_URL
#解压缩安装包
tar -xzf $PYTHON_PKG
#进入刚解压缩的目录
cd $PYTHON_DIR
#指定python3的安装目录为/usr/local/python3
#./configure --prefix=/usr/local/python3

#指定python3的安装目录为/usr/local/python3并使用ssl模块
./configure --prefix=/usr/local/python3 --with-ssl

#源码编译并安装,时间会持续几分钟。
make && make install

#创建软链接
ln -s /usr/local/python3/bin/python3 /usr/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3

Ubuntu安装脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#设置环境变量
PYTHON_URL=https://www.python.org/ftp/python/3.11.9/Python-3.11.9.tgz
PYTHON_PKG=$(basename $PYTHON_URL)
PYTHON_DIR=$(basename $PYTHON_PKG .tgz)

#安装源码编译需要的编译环境
sudo apt install -y wget build-essential libreadline-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev libffi-dev zlib1g-dev

#下载最新的软件安装包
wget $PYTHON_URL
#解压缩安装包
tar -xzf $PYTHON_PKG
#进入刚解压缩的目录
cd $PYTHON_DIR

#指定python3的安装目录为/usr/local/python3
./configure --prefix=/usr/local/python3
#源码编译并安装,时间会持续几分钟。
make && make install

#创建软链接
ln -s /usr/local/python3/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python3/bin/pip3 /usr/local/bin/pip3

PIP加速

1
2
3
4
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host = pypi.tuna.tsinghua.edu.cn

pip文件位置:

  • /etc/pip.conf
  • ~/.config/pip/pip.conf
  • ~/.pip/pip.conf

解决SSL证书验证失败问题

问题描述

使用openssl11编译的python3.11在访问https网页时会报错:<urlopen error [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1002)>

通过ssl.get_default_verify_paths()查看cafile=None

1
2
3
>>> import ssl
>>> print(ssl.get_default_verify_paths())
DefaultVerifyPaths(cafile=None, capath='/usr/local/openssl111/ssl/certs', openssl_cafile_env='SSL_CERT_FILE', openssl_cafile='/usr/local/openssl111/ssl/cert.pem', openssl_capath_env='SSL_CERT_DIR', openssl_capath='/usr/local/openssl111/ssl/certs')

通过ls /usr/local/openssl111/ssl/certs/查看对应目录下的确没有证书

解决方案

正常情况下,CentOS的CA证书在/etc/pki/tls/cert.pem,是指向/etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem的软链接

1
2
/etc/pki/tls/cert.pem
lrwxrwxrwx 1 root root 49 Jul 30 2023 /etc/pki/tls/cert.pem -> /etc/pki/ca-trust/extracted/pem/tls-ca-bundle.pem

指定CA证书路径: 在创建SSL上下文时指定:

1
2
3
4
5
6
7
8
import ssl

# 创建一个SSL context
context = ssl.create_default_context()

# 指定CA证书文件的路径
cafile_path = '/etc/pki/tls/cert.pem'
context.load_verify_locations(cafile=cafile_path)

使用环境变量: 可以设置SSL_CERT_FILE环境变量来指定CA证书文件的位置。Python的SSL模块会检查这个环境变量:

1
export SSL_CERT_FILE=/etc/pki/tls/cert.pem

在Python脚本中,也可以使用os.environ来设置:

1
2
3
4
5
6
7
8
9
import os
import ssl

# 设置环境变量
os.environ['SSL_CERT_FILE'] = '/etc/pki/tls/cert.pem'

# 创建一个SSL context
context = ssl.create_default_context()
# 现在这个context会使用指定的CA证书文件

使用系统默认的CA证书: 如果系统已经安装了CA证书,但Python没有找到它们,可以尝试更新系统或者Python环境,以确保Python包含了必要的证书路径。

在Linux系统中,可以使用包管理器来安装CA证书,例如在Ubuntu或Debian系统中:

1
sudo apt-get install ca-certificates

确保安装了ca-certificates包之后,Python通常能够找到系统默认的CA证书。

下载并指定CA证书: 如果没有CA证书,可以从诸如cURL网站上下载最新的CA证书文件(例如cacert.pem),然后按照上述方法指定路径。

径。


Linux编译安装Python3.11
https://www.intx.work/posts/c8d51b2d.html
发布于
2025年3月29日
更新于
2025年6月29日
许可协议