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 ./configure --prefix=/usr/local/python3 make && make installln -s /usr/local/python3/bin/python3 /usr/local/bin/python3ln -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 context = ssl.create_default_context() 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 osimport ssl os.environ['SSL_CERT_FILE' ] = '/etc/pki/tls/cert.pem' context = ssl.create_default_context()
使用系统默认的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
),然后按照上述方法指定路径。
径。