Linux源码编译安装Python 3.6详细步骤
详细介绍在Linux操作系统中通过官方源码编译安装Python 3.6的完整步骤,涵盖依赖包准备、编译配置、make altinstall隔离安装、软链接与环境验证,避免破坏系统原有Python环境。
make altinstall 严格隔离安装,并最终配置软链接完成多项核心功能自检。
一、编译前的系统依赖准备
Python 解释器本身由 C 语言编写,其基础功能以及部分标准库(例如用于 HTTPS 通信的 ssl 模块、动态库加载的 _ctypes 模块和解压缩的 zlib 模块)高度依赖操作系统底层的动态链接库与 C 头文件。如果直接对源码执行编译而未预先准备这些依赖,配置脚本将直接忽略对应功能,最终产出的 Python 解释器在运行时会频繁抛出 ModuleNotFoundError 致命异常。
在正式开始前,需要根据当前 Linux 发行版类型,通过包管理器一次性装齐核心构建环境与开发包:
1. RHEL / CentOS 系列命令
sudo yum update -y
sudo yum install -y gcc make zlib-devel bzip2-devel openssl-devel \
ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel \
db4-devel libpcap-devel xz-devel libffi-devel wget tar
2. Debian / Ubuntu 系列命令
sudo apt-get update
sudo apt-get install -y build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget tar llvm \
libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev \
liblzma-dev libgdbm-dev
二、获取官方源码与编译配置
Python 3.6 系列的最终安全维护版本为 3.6.15。建议在系统的 /usr/local/src 或当前用户主目录下下载官方发布的源码归档包并进行解压。
# 进入源码下载存储目录
cd /usr/local/src
# 下载官方发布的 Python 3.6.15 源码归档
sudo wget https://www.python.org/ftp/python/3.6.15/Python-3.6.15.tgz
# 解压归档包并进入解压出的目录
sudo tar -zxvf Python-3.6.15.tgz
cd Python-3.6.15
进入源码目录后,需要调用 ./configure 脚本生成适应该操作系统的 Makefile 文件。在该步骤中,务必显式指定安装路径与性能优化选项:
sudo ./configure --prefix=/usr/local/python36 --enable-optimizations
关键参数说明:
--prefix=/usr/local/python36:指定构建产物的根安装目录。如果不指定此参数,默认所有二进制、类库和头文件将散落在/usr/local/bin、/usr/local/lib等系统通用目录中,未来若需升级、排查冲突或完整卸载将变得极其棘手。通过独立路径可以实现完全隔离。--enable-optimizations:启用基于性能分析的引导优化(PGO/LTO)。编译器会在编译期间运行一系列自动化测试用例,根据性能热点优化二进制分支预测。这会显著延长编译时长(通常增加5到15分钟),但可使最终生成的 Python 解释器运行效率提升约 10% 到 20%。
三、编译与安全安装:切勿使用 make install
完成配置后,即可调用 make 启动构建。为了缩短编译等待时间,可以通过 -j 参数开启多线程并行编译。通常建议线程数设置为当前机器的 CPU 逻辑核心数:
# 查看当前 CPU 核心数并启动多线程编译
make -j $(nproc)
编译完成后,将文件写入目标系统时,绝对不要执行 make install,必须严格使用 make altinstall 命令:
sudo make altinstall
这一区分至关重要。Linux 操作系统(例如 CentOS 7)深度依赖系统自带的 /usr/bin/python 执行 yum 等运维工具;而 Ubuntu 系统的大量守护进程依赖自带的 python3。如果运行 make install,构建系统会默认创建无版本后缀的 python 与 python3 符号链接,甚至覆盖系统的全局解释器。这将直接导致系统的包管理器和关键系统工具因语法不兼容彻底瘫痪。
相对地,make altinstall 会在目标目录中跳过创建通用的 python 与 python3 链接,仅创建严格带有版本后缀的 python3.6 与 pip3.6 可执行文件,从而保证整个宿主操作系统原有环境的纯净与稳定。
四、环境配置与软链接建立
由于在配置步骤中将安装前缀指定为了 /usr/local/python36,此时系统的全局 PATH 环境变量中并不包含该目录下的二进制文件。为了在任意路径下直接调用,推荐创建软链接至全局路径 /usr/local/bin:
# 为 Python 3.6 解释器建立软链接
sudo ln -sf /usr/local/python36/bin/python3.6 /usr/local/bin/python3.6
# 为 Python 3.6 对应的 pip 建立软链接
sudo ln -sf /usr/local/python36/bin/pip3.6 /usr/local/bin/pip3.6
如果希望将 /usr/local/python36/bin 完整包含进环境路径,亦可通过在 /etc/profile.d/ 增加环境变量配置文件实现:
echo 'export PATH=/usr/local/python36/bin:$PATH' | sudo tee /etc/profile.d/python36.sh
source /etc/profile.d/python36.sh
五、安装后验证与核心模块检查
安装完成后,切忌仅通过 python3.6 -V 打印出版本号就草率判定成功。源码编译中最隐蔽的问题在于依赖缺失导致某些内置模块未能生成。必须逐一运行以下四项自检:
# 1. 验证解释器版本
python3.6 -V
# 预期示例: Python 3.6.15
# 2. 验证 SSL/TLS 网络加密模块(核心重点:决定 pip 是否可用)
python3.6 -c "import ssl; print(ssl.OPENSSL_VERSION)"
# 预期示例: OpenSSL 1.0.2k-fips 26 Jan 2017 (或对应系统 OpenSSL 版本)
# 3. 验证 _ctypes 模块(核心重点:决定外部 C 库调用与多数第三方包)
python3.6 -c "import _ctypes; print('ctypes OK')"
# 预期示例: ctypes OK
# 4. 验证 pip3.6 路径与可用性
pip3.6 --version
# 预期示例: pip 21.3.1 from /usr/local/python36/lib/python3.6/site-packages/pip (python 3.6)
六、常见编译报错与修复方案
1. 缺少 _ctypes 模块
表现特征:执行 import ctypes 时报错 ModuleNotFoundError: No module named '_ctypes'。
原因排查:系统未预装 libffi-devel(或 Debian 系列的 libffi-dev)。
解决办法:补充安装该库后,无需删除已解压源码,直接在原源码目录下重新执行 ./configure --prefix=/usr/local/python36 --enable-optimizations 并再次运行 make altinstall 即可。
2. pip is configured with locations that require TLS/SSL
表现特征:使用 pip3.6 install 下载包时报错,提示 ssl 模块不可用。
原因排查:配置阶段未找到 openssl-devel / libssl-dev 开发包,导致内置的 _ssl.c 未参与编译。
解决办法:安装 openssl-devel。若是在高版本系统(如 Ubuntu 22.04+)中安装 Python 3.6,系统默认提供的 OpenSSL 3.0 与 Python 3.6 不兼容,此时需自行源码编译一份 OpenSSL 1.1.1 安装在 /usr/local/openssl11,并在配置 Python 时通过 --with-openssl=/usr/local/openssl11 显式指定路径。
3. pip 安装源加速配置
Python 3.6 对应的 pip 默认连接官方源,在国内网络环境下容易出现连接超时。建议在初次使用前将全局镜像源切换为国内高可用镜像:
# 升级 pip 到支持 Python 3.6 的最高版本并配置国内清华镜像源
pip3.6 install --upgrade pip -i https://pypi.tuna.tsinghua.edu.cn/simple
pip3.6 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













