[Share Experiences] CentOS 7 非 root 用户编译安装 Python 3.10
Tofloor
poster avatar
littlebat
deepin
2023-08-07 18:16
Author

(首发地址:学习日记 https://www.learndiary.com/2023/07/centos-7-non-root-compile-python-3-10/ )

本文详细介绍在 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/

一、自动下载、编译、安装脚本:

#!/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

Reply Favorite View the author
All Replies
阿尼樱奈奈
Moderator
2023-08-07 18:34
#1

like

Reply View the author
青稚
deepin
2023-08-08 00:21
#2

目前代替CentOS的是Rocky Linux,这个比CentOS7新一些

Reply View the author
littlebat
deepin
2023-08-08 19:05
#3
青稚

目前代替CentOS的是Rocky Linux,这个比CentOS7新一些

确实。不过就我在淘宝上接触的订单来说,用红帽系的还是 CentOS 7 最多,还有 RHEL 7、6,CentOS 8、6,还没碰到一个用 Rocky 的

Reply View the author
青稚
deepin
2023-08-08 19:38
#4
littlebat

确实。不过就我在淘宝上接触的订单来说,用红帽系的还是 CentOS 7 最多,还有 RHEL 7、6,CentOS 8、6,还没碰到一个用 Rocky 的

Rocyk有国内镜像源,速度方面不用担心

Reply View the author