centos7源码编译安装python3
centos7源码编译安装python3
下载源码包安装
这里我安装的3.10.6版本
官网链接下载地址: https://www.python.org/ftp/python/3.10.6/
使用浏览器和wget都可以:
## 安装依赖和工具:
yum install zlib-devel bzip2-devel opssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc libffi-devel wgetwget https://www.python.org/ftp/python/3.10.6/Python-3.10.6.tgz
源码包安装完成之后,进行解压即可:
cd /opt
tar -xvf Python-3.10.6.tgz
mv Python-3.10.6 /usr/local/
编译安装
进入到对应目录下面,执行编译安装
cd /usr/local/Python-3.10.6
./configure
make & make install
执行对应的编译安装命令即可.
踩坑记录
因为之前遇到过安装之后,Python的ssl模块使用报错,说是找不到,所以需要再编译的时候进行处理,
先修改配置文件指定openssl
## 查询位置
find / -name "openssl" -type d 2>/dev/null
# 我的是在这里,/usr/include/openssl## 检查当前openssl模块的版本
openssl version
OpenSSL 1.0.2k-fips 26 Jan 2017
# 这里我的版本太低了,与python3的不兼容了,指定这个编译安装时会报错,所以需要安装高版本的
安装高版本的openssl
# 安装编译依赖
yum install -y wget make gcc gcc-c++ perl# 下载OpenSSL源码
wget https://www.openssl.org/source/openssl-1.1.1q.tar.gz
tar -zxvf openssl-1.1.1q.tar.gz
cd openssl-1.1.1q# 配置安装路径(建议安装到/usr/local/openssl)
./config --prefix=/usr/local/openssl \--openssldir=/usr/local/openssl \shared zlib# 编译并安装
make -j$(nproc)
make install
在修改Python编译中的配置,python3.10以后的版本OPENSSL不再是/usr/local/ssl 的默认路径,变成了/path/to/openssl/directory,而使用openssl3以上的版本的lib目录名也变成了lib64,编辑vim /你自己的Python编译源文件路径/Modules/Setup。
## 进入到目录
cd /usr/local/Python-3.10.6/Modules
vim Setup
## 修改下面的配置.
再次进行重新编译,又遇到下面的报错:
gcc -pthread -Xlinker -export-dynamic -o python Programs/python.o libpython3.10.a -lcrypt -lpthread -ldl -lutil -lm -L/usr/local/openssl/lib -lssl -lcrypto -lm
./python -E -S -m sysconfig --generate-posix-vars ;\
if test $? -ne 0 ; then \echo "generate-posix-vars failed" ; \rm -f ./pybuilddir.txt ; \exit 1 ; \
fi
./python: error while loading shared libraries: libssl.so.1.1: cannot open shared object file: No such file or directory
generate-posix-vars failed
make: *** [pybuilddir.txt] Error 1
处理方式,从新指定一下动态链接库的位置:
# 查找libssl.so.1.1和libcrypto.so.1.1
find /usr/local/openssl -name "libssl.so.1.1"
find /usr/local/openssl -name "libcrypto.so.1.1"# 示例输出:
# /usr/local/openssl/lib/libssl.so.1.1
# /usr/local/openssl/lib/libcrypto.so.1.1# 创建OpenSSL配置文件
echo "/usr/local/openssl/lib" > /etc/ld.so.conf.d/openssl.conf# 刷新动态链接器缓存
ldconfig
#清除之前编译
make clean
## 重新编译
./configure
make & make install
到这里编译安装完成了,我们来测试一下
pip3 install requests -i https://mirrors.aliyun.com/pypi/simple/[root@ldap bin]# python3 -c "import requests; r = requests.get('https://www.baidu.com'); print(r.status_code)"
200
[root@ldap bin]# pwd
/usr/local/bin
从这里可以看到我们的模块可以正常使用了.
我们这里安装编译之后,自动创建到/usr/local/bin下的应用程序了,也可以在其他目录正常使用了,不需要在配置软连接了.
到此Python3安装完成了.