本文详细介绍在 CentOS 7 上非 root 用户编译安装 Python 3.10,以能使用 bz2、ctypes、ssl 三个 Python 模块为示例,供有需要的朋友参考。
文中的代码可以复制下来保存为 bash 脚本文件,如 build_py310.sh,在当前用户下,直接 bash build_py310.sh
执行,即会在当前用户家目录下建立 build_py310 编译文件夹进行编译,并且所有文件安装在家目录下的 py310 文件夹中。在当前用户家目录下的 .bashrc 文件中会写入运行 Python 需要的环境变量 LD_LIBRARY_PATH、PATH。
编译安装完成后,执行 . ~/.bashrc
会在当前环境中设置好上述环境变量。执行 python3
即可进入当前安装的 Python 交互环境。
视频演示:【CentOS 7 非 root 用户编译安装 Python 3.10】 https://www.bilibili.com/video/BV1c8411o7FJ/?share_source=copy_web&vd_source=d1925b070926f23b2b6676137251e9ea
一、自动下载、编译、安装脚本:
#!/bin/bash
# 建立安装和编译目录
cd
mkdir py310 build_py310 -v
# 下载源码:
cd build_py310
wget --no-check-certificate https://sourceware.org/pub/bzip2/bzip2-1.0.8.tar.gz
wget --no-check-certificate https://gcc.gnu.org/pub/libffi/libffi-3.4.3.tar.gz
wget --no-check-certificate https://www.openssl.org/source/openssl-1.1.1u.tar.gz
wget --no-check-certificate https://www.python.org/ftp/python/3.10.12/Python-3.10.12.tgz
# 编译 bzip2:
tar -xf bzip2-1.0.8.tar.gz
cd bzip2-1.0.8
make -f Makefile-libbz2_so
make
make install PREFIX=$HOME/py310
cp libbz2.so.1.0 libbz2.so.1.0.8 $HOME/py310/lib/ -v
# 编译 libffi:
cd ..
tar -xf libffi-3.4.3.tar.gz
cd libffi-3.4.3
./configure --prefix=$HOME/py310
make
# make check # 需要 expect 和 runtest
make install
# 编译 openssl:
cd ..
tar -xf openssl-1.1.1u.tar.gz
cd openssl-1.1.1u
./config --prefix=$HOME/py310
make
# make test # 需要一些 perl 模块
make install
# 编译 python:
export CFLAGS="-I$HOME/py310/include"
export LDFLAGS="-L$HOME/py310/lib -L$HOME/py310/lib64"
export PKG_CONFIG_PATH="$HOME/py310/lib/pkgconfig:$HOME/py310/lib64/pkgconfig:$PKG_CONFIG_PATH"
export LD_LIBRARY_PATH="$HOME/py310/lib:$HOME/py310/lib64:$LD_LIBRARY_PATH"
export PATH="$HOME/py310/bin:$PATH"
echo "" >> $HOME/.bashrc
echo 'export LD_LIBRARY_PATH="$HOME/py310/lib:$HOME/py310/lib64:$LD_LIBRARY_PATH"' >> $HOME/.bashrc
echo 'export PATH="$HOME/py310/bin:$PATH"' >> $HOME/.bashrc
cd ..
tar -xf Python-3.10.12.tgz
cd Python-3.10.12
# ./configure --prefix=$HOME/py310 --enable-optimizations # CentOS 7 的低版本的 gcc 加上优化编译参数会报错
./configure --prefix=$HOME/py310
make
make test 2>&1 | tee py310_test.log # 保存测试过程信息
make testall 2>&1 | tee py310_testall.log # 保存全面测试过程信息
make install
exit 0
二、注意事项:
1、libffi 和 openssl 的编译测试因为需要一些额外的程序,这里没有进行。Python 的测试和全面测试都可正常进行。
2、上述编译的 Python 模块是不完整的,如 sqlite、tkinter 等模块都没有编译上。
3、对于普通的 CentOS 7 和高版本 Python 用户来说,现在使用 conda 虚拟环境安装需要的 Python 版本是一个好的选择。
三、参考链接:
1、How To Install Python 3.10 on CentOS 7 | CentOS 8 Linux Systems: https://brightwhiz.com/how-to-install-python-3-10-on-centos-7-centos-8-linux-systems/ (有问题,openssl 版本必须大于或等于 1.1.1)
2、記錄centos8 升級Python3.6到Python3.9以及可能遇到的問題 https://blog.csdn.net/m0_69082030/article/details/128639404 (gcc 8.1.0 以下版本不能使用 --enable-optimizations)
3、Linux GCC常用命令 https://www.cnblogs.com/ggjucheng/archive/2011/12/14/2287738.html (详细示例了 gcc 编译程序的过程)
4、pkg-config用法详解 https://blog.csdn.net/wxh0000mm/article/details/122533391 (讲了 pkg-config 的主要用途及 PKG_CONFIG_PATH 环境变量)
5、gcc -L / -l option flags https://www.rapidtables.com/code/linux/gcc/gcc-l.html
6、The -l option in GCC https://stackoverflow.com/questions/32929709/the-l-option-in-gcc
7、Guide to pkg-config https://people.freedesktop.org/~dbn/pkg-config-guide.html