CentOS 上安装 Python 需要哪些依赖?从基础环境到编译与项目隔离一次讲清

沈知远
沈知远
发布时间:2026-08-25| 94人浏览过
原创

前言

在 CentOS 上安装 Python,看起来只是装包和跑命令,但真正容易卡住的往往是系统依赖、源码编译和默认 Python 的处理边界。本文按实际部署顺序,把基础安装、自定义版本编译、常见底层依赖和虚拟环境管理拆开说明,方便你判断哪些步骤必须做、哪些只在特定场景下才需要。

在 CentOS 上装 Python,最容易出问题的通常不是 yum install 这一步,而是后面的依赖缺失、源码编译报错,以及误改系统默认 Python 带来的连锁影响。下面按实际部署时最常见的路径整理一遍:先更新系统并装基础环境,再处理自定义版本编译,最后补齐常见库依赖和虚拟环境管理,这样更容易判断每一步到底是不是必需。

先把系统和基础 Python 环境准备好

正式安装前,先更新系统包,目的是尽量减少旧版本组件引发的兼容性问题。这个步骤很常规,但在 CentOS 上往往能提前避开不少后续报错。

sudo yum update -y
# CentOS 7/8通用

接着安装 Python 3 和 pip。需要注意的是,CentOS 7 默认还是 Python 2.7,通常要手动补装 Python 3;CentOS 8 及以上一般已经带有 Python 3.6+,但很多场景仍然会补装对应的软件包,确保命令和组件齐全。

sudo yum install -y python3 python3-pip
# 安装Python 3和pip

如果你的目标只是跑一般脚本、安装常见包,做到这一步通常已经够用。只有在官方源版本不满足需求时,才需要进入源码编译阶段。

需要指定版本时,如何源码编译 Python

当仓库里没有目标版本,比如需要 Python 3.11,或者你希望开启特定编译优化,就需要自己编译安装。这种方式更灵活,但前提是系统工具链和开发库要先补齐。

展示 CentOS 上安装 Python 3.11 源码编译链路的信息图
Python 3.11 源码编译流程把工具链、依赖包、源码编译和安装方式串起来,更容易看清哪些步骤只在自定义版本时才需要。

第一步是安装编译工具和 Python 常见依赖头文件。少了这些包,configure 或 make 阶段很容易报错,尤其是 openssl-devel、zlib-devel、libffi-devel、sqlite-devel 这类组件。

sudo yum groupinstall -y "Development Tools"
# 安装编译工具链(gcc、make等)
sudo yum install -y zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel uuid-devel libffi-devel
# Python编译所需系统依赖

然后下载源码并开始编译。下面以 Python 3.11.2 为例:

wget https://www.python.org/ftp/python/3.11.2/Python-3.11.2.tgz
tar -zxvf Python-3.11.2.tgz
cd Python-3.11.2
./configure --prefix=/usr/local/python3.11 --enable-optimizations
# 配置编译选项
make -j $(nproc)
# 多线程编译(提升速度)
sudo make altinstall
# 避免覆盖系统默认Python

这里有两个点值得特别注意:

为什么要单独指定安装目录

--prefix=/usr/local/python3.11 的作用,是把新版本安装到独立目录里,和系统自带 Python 分开。这样更适合服务器环境,也更方便以后升级、回滚或并存多个版本。

为什么建议用 altinstall

sudo make altinstall 的核心目的,是避免把系统已有的 python 或 python3 直接覆盖掉。CentOS 的一些系统工具依赖默认 Python 运行,贸然替换可能会影响包管理或系统服务。

展示 Python 包安装失败时系统依赖与虚拟环境关系的信息图
系统依赖与项目依赖分层把“系统层依赖”和“项目层依赖”分开看,能更快判断报错该回到 yum 还是继续查 pip。

安装完成后,可以按需建立软链接,方便直接调用:

sudo ln -sf /usr/local/python3.11/bin/python3.11 /usr/bin/python3
sudo ln -sf /usr/local/python3.11/bin/pip3.11 /usr/bin/pip3

这一步虽然省事,但是否要改到 /usr/bin/python3,需要结合机器用途决定。如果是生产环境,通常更稳妥的做法仍然是显式调用完整路径,或只在虚拟环境中使用目标版本。

为什么很多 Python 包安装失败,问题却不在 pip

不少人第一次在 CentOS 上装包时会遇到一个误区:看到 pip install 报错,就以为是 pip 或 Python 版本有问题。实际上,像 numpy、scipy、psycopg2 这类包,经常依赖系统层的 C、Fortran 或数据库开发库,缺的是操作系统依赖,不是 Python 依赖本身。

常见的系统级依赖可以提前装好:

sudo yum install -y blas-devel lapack-devel gcc-gfortran
# 数值计算库依赖
sudo yum install -y mariadb-devel postgresql-devel
# 数据库驱动依赖(如MySQL/PostgreSQL)

这组依赖主要对应两类场景:

数值计算类包

如果项目里会装科学计算或数据处理库,blas-devel、lapack-devel 和 gcc-gfortran 往往是高频前置项。缺少它们时,编译扩展模块就可能直接失败。

数据库驱动类包

如果要连接 MySQL 或 PostgreSQL,一些 Python 驱动会依赖底层数据库开发文件,因此需要提前安装 mariadb-devel、postgresql-devel。否则即便 Python 环境正常,驱动包也可能装不上。

遇到报错时,一个实用判断方法是看错误提示里是否出现缺失的头文件、链接库或编译器信息。如果有,优先回到 yum 层补系统依赖,通常比反复重装 pip 更有效。

项目依赖更稳妥的做法:配合虚拟环境使用 pip

Python 包安装本身并不复杂,真正影响后期维护的是依赖隔离。不同项目使用不同版本的库很常见,如果都混装在系统环境里,后续升级一个包就可能把另一个项目带崩。

因此更推荐的做法,是为每个项目单独建立虚拟环境,再在其中执行 pip install:

# 创建虚拟环境
python3 -m venv myenv
# 激活虚拟环境
source myenv/bin/activate
# 安装包(以requests为例)
pip install requests
# 安装指定版本(如requests==2.25.1)
pip install requests==2.25.1
# 从requirements.txt安装所有依赖(项目常用)
pip install -r requirements.txt
# 退出虚拟环境
deactivate

这一套流程的价值主要体现在三个方面:

隔离不同项目的版本冲突

一个项目依赖 requests==2.25.1,另一个项目可能需要更新版本。虚拟环境可以把它们拆开,各自维护,不互相影响。

减少对系统 Python 的干扰

系统环境越干净,排查问题越容易。把第三方包都装进项目自己的虚拟环境里,也能降低误操作风险。

方便复现部署环境

通过 requirements.txt 统一安装依赖,是团队协作和服务器部署里最常见的方式。只要系统层依赖齐全,项目环境通常就能较稳定地复现出来。

什么时候需要 EPEL,以及几个容易忽略的注意点

如果默认仓库中没有你需要的软件包,可以启用 EPEL(Extra Packages for Enterprise Linux)作为补充源。它经常用于扩展 CentOS 的常用软件包范围。

sudo yum install -y epel-release
sudo yum update

不过,仓库扩展只是补充手段,真正影响 Python 安装稳定性的,还是前面提到的版本边界和依赖完整性。实际使用时,下面几个注意点最值得优先记住:

  • 不要直接覆盖系统默认 Python。CentOS 的部分系统服务依赖它运行,更稳妥的方式是使用虚拟环境,或把自定义版本装到独立路径。
  • 编译时加入 --enable-optimizations 可以提升运行效率,但代价是编译时间会更长,适合对性能有要求的场景。
  • 如果安装中出现依赖错误,优先根据报错回头补系统开发包,例如 libffi-devel、sqlite-devel,而不是只在 pip 层反复尝试。

如果只是日常开发,通常的推荐顺序是:先装系统 Python 3 和 pip,再用虚拟环境管理项目;只有在版本不够新、需要特定功能或性能优化时,再考虑源码编译。按这个顺序处理,出问题时也更容易定位到底是系统层、编译层,还是项目依赖层的问题。

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。