Skip to content

Linux 安装 Python ​

Linux 发行版(Distribution)通常预装了 Python,但预装版本往往偏旧且与系统工具强绑定。本节将介绍在 Debian/Ubuntu、RHEL/CentOS/Fedora、Arch 等主流发行版上安装与升级 Python 的完整方法,涵盖 apt、dnf、源码与 pyenv 四条路径,并配好 pip 与 venv(虚拟环境,Virtual Environment)。

前置知识

阅读本节前,建议先了解:Python 是什么

基础概念 ​

Linux 上的 Python 安装有几个必须理解的概念:

概念说明
系统 Python发行版预装,/usr/bin/python3,被大量系统工具依赖
PEP 668标记「外部管理环境」,禁止 pip 直接写入系统环境
apt / dnf / pacman各发行版的包管理器(Package Manager)
deadsnakes PPAUbuntu 上提供新版 Python 的第三方源
venv / virtualenv项目级隔离环境
Update AlternativesDebian 系切换默认 python3 指向的机制

PEP 668 是最大的坑

自 Ubuntu 23.04 / Debian 12 起,系统 Python 被标记为「externally-managed-environment」。此时执行 pip install 会直接报错:error: externally-managed-environment。正确的做法是使用虚拟环境,而非 --break-system-packages(后者会破坏系统包管理)。

语法与用法 ​

Debian/Ubuntu:

bash
# 更新软件源
sudo apt update

# 安装 Python 3 及 venv、pip
sudo apt install -y python3 python3-venv python3-pip

# 查看版本
python3 --version

RHEL/Fedora:

bash
# Fedora
sudo dnf install -y python3 python3-pip

# RHEL 9 / Rocky / AlmaLinux
sudo dnf install -y python3 python3-pip

Arch Linux:

bash
# Arch 通常已预装 python
sudo pacman -S --needed python python-pip

详细说明 ​

Debian / Ubuntu 系 ​

方式一:使用系统仓库

bash
# 更新索引
sudo apt update

# 安装
sudo apt install -y python3 python3-venv python3-pip python3-dev

# 验证
python3 --version
pip3 --version

方式二:使用 deadsnakes PPA 安装新版

系统仓库的 Python 版本通常滞后,deadsnakes 提供更新版本:

bash
# 安装依赖工具
sudo apt install -y software-properties-common

# 添加 deadsnakes PPA
sudo add-apt-repository ppa:deadsnakes/ppa -y
sudo apt update

# 安装指定版本(以 3.12 为例)
sudo apt install -y python3.12 python3.12-venv python3.12-dev

# 验证(注意命令带小版本号)
python3.12 --version

为什么必须单独安装 python3.12-venv

Ubuntu 的 Python 将标准库拆分为多个包,venv 属于独立包。若只装 python3.12 而缺 python3.12-venv,执行 python3.12 -m venv 会报 ensurepip is not available。

RHEL / CentOS / Rocky / AlmaLinux ​

bash
# 查看系统自带版本
python3 --version

# 安装(RHEL 9 自带 Python 3.9)
sudo dnf install -y python3 python3-pip python3-devel

# 若需要更新版本,使用 AppStream 模块(RHEL 8/9)
sudo dnf module list python39
sudo dnf module reset python39
sudo dnf module enable python39:3.9
sudo dnf install -y python39

# 或使用 IUS / EPEL 提供的 python3.12
sudo dnf install -y https://repo.ius.io/ius-release-el9.rpm
sudo dnf install -y python3.12 python3.12-pip

dnf 与 yum

RHEL 8 起 yum 已是指向 dnf 的软链,使用 dnf 即可,二者命令基本一致。

Fedora ​

bash
# Fedora 滚动较快,仓库中的 Python 版本较新
sudo dnf install -y python3 python3-pip python3-devel

# 查看可用版本
dnf search python3.

# 安装虚拟环境支持(Fedora 已内置 venv)
sudo dnf install -y python3-virtualenv

Arch Linux / Manjaro ​

bash
# Arch 的 python 包即最新版
sudo pacman -S --needed python python-pip

# 升级
sudo pacman -Syu python

# 验证
python --version

openSUSE ​

bash
# 安装 Python 3
sudo zypper install -y python3 python3-pip python3-devel

# 验证
python3 --version

pyenv(跨发行版通用) ​

当发行版仓库版本不合适时,pyenv 是最灵活的方案:

bash
# 安装编译依赖(Debian/Ubuntu)
sudo apt install -y make build-essential libssl-dev zlib1g-dev \
    libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
    libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev \
    libffi-dev liblzma-dev

# 安装 pyenv
curl -fsSL https://pyenv.run | bash

# 配置 Shell(bash 用户写入 ~/.bashrc,zsh 用户写入 ~/.zshrc)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
source ~/.bashrc

# 安装 Python 3.12.7
pyenv install 3.12.7
pyenv global 3.12.7

# 验证
python --version

环境变量配置 ​

Shell 配置 ​

bash
# 编辑 ~/.bashrc(bash)或 ~/.zshrc(zsh)
nano ~/.bashrc

# 追加以下内容
export PYTHONUTF8=1                 # 强制 UTF-8 模式
export PYTHONDONTWRITEBYTECODE=1    # 不生成 .pyc
export PYTHONPATH="$HOME/pylibs:$PYTHONPATH"   # 追加模块搜索路径
export PATH="$HOME/.local/bin:$PATH"           # 用户级 pip 安装的可执行文件

# 生效
source ~/.bashrc

# 验证
echo $PYTHONUTF8

pip 镜像与配置 ​

bash
# 用户级 pip 配置(推荐)
python3 -m pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
python3 -m pip config set global.trusted-host pypi.tuna.tsinghua.edu.cn

# 查看配置
python3 -m pip config list

# 配置文件位置
# ~/.config/pip/pip.conf

~/.config/pip/pip.conf 示例:

ini
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
timeout = 60

[install]
user = true

Update Alternatives 切换默认版本 ​

Debian / Ubuntu 上可通过 update-alternatives 管理 python3 指向:

bash
# 注册新版本为候选
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.11 1
sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.12 2

# 交互式选择默认版本
sudo update-alternatives --config python3

# 查看当前指向
ls -l /usr/bin/python3

谨慎切换系统 python3

许多系统工具(如 apt、ubuntu-drivers)依赖特定的 Python 版本。随意切换 /usr/bin/python3 可能导致系统功能异常。若只是为了开发,请使用 pyenv 或虚拟环境。

验证安装 ​

基本验证命令 ​

bash
# 1. 版本
python3 --version

# 2. pip 版本
python3 -m pip --version

# 3. 解释器完整路径
python3 -c "import sys; print(sys.executable)"

# 4. 是否处于虚拟环境
python3 -c "import sys; print('虚拟环境中' if sys.prefix != sys.base_prefix else '系统环境')"

# 5. 验证 venv 可用
python3 -m venv --help > /dev/null && echo "venv 可用"

# 6. 查看 site-packages
python3 -c "import site; print(site.getsitepackages())"

环境自检脚本 ​

python
"""check_env.py —— Linux 下 Python 环境自检。"""

import sys
import platform
import shutil


def report() -> None:
    """输出解释器、venv、pip 的关键状态。"""
    in_venv: bool = sys.prefix != sys.base_prefix
    print(f"Python 版本:{sys.version.split()[0]}")
    print(f"解释器路径:{sys.executable}")
    print(f"发行版:{platform.freedesktop_os_release().get('PRETTY_NAME', 'Unknown')}")
    print(f"是否在虚拟环境:{'是' if in_venv else '否'}")

    pip_path = shutil.which("pip3")
    print(f"pip3 路径:{pip_path or '未找到'}")


if __name__ == "__main__":
    report()
bash
python3 check_env.py

实战示例 ​

案例一:Ubuntu 上搭建项目环境 ​

bash
# 1. 安装 venv 与 pip(Ubuntu 24.04 必须显式安装 venv)
sudo apt update
sudo apt install -y python3 python3-venv python3-pip python3-dev

# 2. 进入项目目录
mkdir -p ~/projects/demo && cd ~/projects/demo

# 3. 创建虚拟环境
python3 -m venv .venv

# 4. 激活
source .venv/bin/activate

# 5. 升级 pip 并安装依赖
python -m pip install --upgrade pip
pip install requests flask

# 6. 导出依赖
pip freeze > requirements.txt

# 7. 退出
deactivate

使用 pyenv 获得 3.12 环境

若系统仅提供 3.10,而项目要求 3.12,可在同一台机器上用 pyenv 安装 3.12 后再创建 venv:

bash
pyenv install 3.12.7
cd ~/projects/demo
pyenv local 3.12.7
python -m venv .venv
source .venv/bin/activate
python --version   # Python 3.12.7

案例二:在服务器上以服务方式运行 ​

bash
# 1. 创建专用系统用户
sudo useradd -r -s /bin/false appuser

# 2. 部署代码到 /opt/demo
sudo mkdir -p /opt/demo
sudo chown appuser:appuser /opt/demo
cd /opt/demo

# 3. 创建虚拟环境并安装依赖
sudo -u appuser python3 -m venv .venv
sudo -u appuser .venv/bin/pip install -r requirements.txt

# 4. 编写 systemd 服务单元
sudo tee /etc/systemd/system/demo.service > /dev/null <<'EOF'
[Unit]
Description=Demo Python Service
After=network.target

[Service]
Type=simple
User=appuser
WorkingDirectory=/opt/demo
ExecStart=/opt/demo/.venv/bin/python -m demo.server
Restart=on-failure
RestartSec=5

[Install]
WantedBy=multi-user.target
EOF

# 5. 启动并设置开机自启
sudo systemctl daemon-reload
sudo systemctl enable --now demo
sudo systemctl status demo

生产环境不要用 root 运行 Python 服务

使用最小权限的专用用户运行,并在虚拟环境中固定依赖版本,避免安全事故。

案例三:容器中的 Linux Python ​

dockerfile
# 使用官方精简镜像
FROM python:3.12-slim

# 设置工作目录
WORKDIR /app

# 先复制依赖清单以利用构建缓存
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt

# 复制源码
COPY . .

# 非 root 用户运行
RUN useradd -m appuser
USER appuser

CMD ["python", "main.py"]

注意事项 ​

  • PEP 668 报错:不要用 --break-system-packages 破坏系统环境,改用 venv。
  • python vs python3:多数发行版不提供 python 命令,只有 python3;不要擅自创建指向 python3 的 python 符号链接。
  • ensurepip is not available:缺少 python3-venv(Debian 系)或 python3-virtualenv(RHEL 系)。
  • 编译扩展缺头文件:需安装 python3-dev / python3-devel。
  • pyenv 编译失败:缺少 libssl-dev、zlib1g-dev、libffi-dev 等依赖。
  • 多用户权限:全局 pip install 需 sudo,但推荐用户级安装或虚拟环境。

常见问题排查表:

现象原因解决
externally-managed-environmentPEP 668使用 venv
python: command not found未提供 python 别名使用 python3 或 pyenv
ensurepip is not available缺少 venv 包安装 python3-venv
SSL 模块缺失缺 libssl-dev安装后重新编译
_ctypes 缺失缺 libffi-dev安装后重新编译
pip 安装到系统目录未激活 venv检查 sys.prefix

最佳实践 ​

  • 永远使用虚拟环境:系统 Python 只用于运行系统工具。
  • 用 pyenv 管理多版本:不污染系统,灵活切换。
  • 配置国内镜像源:加速依赖安装。
  • 生产环境固定依赖:pip freeze 或使用 uv.lock / requirements.txt 加哈希校验。
  • 使用 slim 基础镜像:容器化时减小体积、降低攻击面。
  • 以非 root 用户运行服务:配合 systemd 最小权限。
  • 定期升级安全补丁:关注 版本生命周期。

下一节

继续学习:源码编译安装

参考链接 ​