在 CentOS 上部署 Python,真正容易出问题的地方通常不在“怎么安装”,而在“该选哪种安装方式、会不会影响系统自带 Python、后续项目怎么隔离依赖”。这篇文章按实际运维流程重新整理了一遍:先准备编译和运行依赖,再分别说明 YUM 安装、源码编译和 pyenv 多版本管理的适用场景,最后补上虚拟环境与验证方法。读完后,你可以根据自己是图省事、要新版本,还是要多版本共存,直接选出合适方案。
先更新系统并补齐基础依赖
无论你最终打算用 yum、源码编译,还是后面使用 pyenv,先把系统软件包和基础依赖准备好,都能减少后续编译失败、模块缺失这类问题。
# 更新系统软件包
sudo yum update -y
# 安装开发工具组(包含gcc、make等编译工具)
sudo yum groupinstall -y "Development Tools"
# 安装Python编译及运行依赖(openssl、bzip2、zlib等)
sudo yum install -y openssl-devel bzip2-devel libffi-devel zlib-devel readline-devel sqlite-devel wget
如果你的目标只是直接装仓库里的 Python,这一步同样值得做;如果你准备编译 3.9.9 这类指定版本,这些依赖基本属于前置条件。
Python 安装方式怎么选
CentOS 上常见的 Python 安装路径主要有两类:直接用 YUM 安装,或者从源码编译。前者部署快、维护简单,后者更适合指定版本和自定义安装路径。

方案一:用 YUM 安装,适合快速可用
对大多数服务器场景来说,仓库里的预编译包已经够用。尤其是 CentOS 8 及以上版本,系统默认通常已经带有 Python 3,先查版本即可。
# CentOS 8及以上版本默认安装Python 3,可直接验证
python3 --version
# 查看Python 3版本
# 若未安装,执行以下命令
sudo yum install -y python3
# 验证安装
python3 --version
# 应输出类似"Python 3.x.x"
这条路径的优点是省事、稳定,适合新手或只需要系统级 Python 运行脚本的环境。缺点也很明确:仓库版本通常偏旧。原文提到,CentOS 7 默认还是 Python 3.6;如果你需要更新版本,YUM 往往不够用。
方案二:源码编译安装,适合指定版本和自定义配置
如果你需要 Python 3.9+,或者希望把解释器安装到独立目录、避免干扰系统默认 Python,那么源码编译更合适。下面以 Python 3.9.9 为例。
# 下载Python源码包(以3.9.9为例,替换为目标版本)
wget https://www.python.org/ftp/python/3.9.9/Python-3.9.9.tgz
# 解压源码包
tar xzf Python-3.9.9.tgz
cd Python-3.9.9
# 配置编译选项(--prefix指定安装路径,--enable-optimizations启用性能优化)
./configure --prefix=/usr/local/python3.9 --enable-optimizations
# 编译并安装(make -j N使用N个线程加速编译,根据CPU核心数调整)
make -j 8
sudo make altinstall # 使用altinstall避免覆盖系统默认Python
# 创建软链接(方便全局调用)
sudo ln -s /usr/local/python3.9/bin/python3.9 /usr/bin/python3.9
sudo ln -s /usr/local/python3.9/bin/pip3.9 /usr/bin/pip3.9
# 验证安装
python3.9 --version # 应输出"Python 3.9.9"
pip3.9 --version # 验证pip是否可用
这里最关键的是 sudo make altinstall。它的目的不是“换一种写法”,而是避免直接覆盖系统默认 Python,降低对系统工具链的影响。对于线上机器,这一步尤其重要。
命令找不到时,检查 PATH 环境变量
源码安装后,如果你执行 python3.9 或 pip3.9 提示命令不存在,通常说明安装目录没有进入系统 PATH。这时可以按用户级方式补到 ~/.bashrc 中。
# 编辑~/.bashrc文件(用户级配置)
echo 'export PATH=/usr/local/python3.9/bin:$PATH' >> ~/.bashrc
# 使配置生效
source ~/.bashrc
# 验证PATH是否生效
echo $PATH # 应包含/usr/local/python3.9/bin
如果前面已经创建了软链接到 /usr/bin/python3.9 和 /usr/bin/pip3.9,很多情况下可以直接调用;但独立把安装目录加入 PATH,仍然更方便排查和维护。
项目依赖隔离:虚拟环境是必备项
Python 环境配好后,不建议所有项目共用一套包。更稳妥的做法是每个项目使用自己的虚拟环境,把依赖限制在项目目录内部。Python 3.3 以上自带 venv,通常无需额外安装。
# 使用venv创建虚拟环境(Python 3.3+自带,无需额外安装)
python3.9 -m venv myenv # 创建名为myenv的虚拟环境
# 激活虚拟环境
source myenv/bin/activate # 激活后,终端提示符会显示(myenv)
# 在虚拟环境中安装依赖(如numpy、pandas)
pip install numpy pandas matplotlib # 仅安装在当前虚拟环境中
# 停用虚拟环境
deactivate # 退出虚拟环境
这一步的核心价值是避免依赖冲突。比如一个项目需要旧版 numpy,另一个项目需要新版时,虚拟环境能把两者彻底隔开。日常开发或部署时,也要记得进入项目后先执行激活命令。
需要多版本共存时,用 pyenv 管理
如果你的机器上要同时维护 Python 3.8、3.9、3.10,或者需要在不同项目之间频繁切换解释器版本,单靠手动安装和软链接就会变得麻烦。这时 pyenv 更适合长期管理。

# 安装pyenv依赖
sudo yum install -y git gcc zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel openssl-devel tk-devel libffi-devel
# 克隆pyenv仓库到用户目录
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
# 配置环境变量(添加到~/.bashrc)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
# 使配置生效
source ~/.bashrc
# 安装指定版本的Python(如3.9.9)
pyenv install 3.9.9
# 设置全局默认Python版本
pyenv global 3.9.9
# 验证当前Python版本
python --version # 应输出"Python 3.9.9"
# 为特定项目设置局部Python版本(在项目目录下执行)
pyenv local 3.8.10 # 仅该项目使用3.8.10版本
pyenv global 适合设置整台机器当前默认版本,pyenv local 则更适合项目目录。对于需要维护多个业务项目、测试多版本兼容性的场景,这种方式比手工维护多个二进制路径更清晰。
最后一步:用脚本验证环境是否真的可用
安装完成不等于环境可用。最直接的检查方式,是写一个最小测试脚本,确认解释器、第三方库和运行路径都正常。

# 创建测试脚本(test.py)
cat << EOF > test.py
print("Hello, Python!")
import numpy
print("NumPy version:", numpy.__version__)
EOF
# 运行脚本(在虚拟环境中运行需先激活)
python3.9 test.py
# 应输出"Hello, Python!"及NumPy版本
如果脚本能正常输出 Hello, Python!,并且能打印出 NumPy version,说明当前环境至少已经具备解释器可用、第三方包可导入这两项基础条件。
怎么选更合适:一页看懂
如果你只是想尽快在 CentOS 上跑起 Python,直接用 yum install -y python3 就够了;如果你明确需要 Python 3.9.9 这类指定版本,源码编译会更灵活;如果机器上长期需要多个版本并行维护,pyenv 的管理成本最低。无论走哪条路,最后都建议配合 venv 使用,把项目依赖隔离开,再用测试脚本完成一次实际验证。









