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 PPA | Ubuntu 上提供新版 Python 的第三方源 |
| venv / virtualenv | 项目级隔离环境 |
| Update Alternatives | Debian 系切换默认 python3 指向的机制 |
PEP 668 是最大的坑
自 Ubuntu 23.04 / Debian 12 起,系统 Python 被标记为「externally-managed-environment」。此时执行 pip install 会直接报错:error: externally-managed-environment。正确的做法是使用虚拟环境,而非 --break-system-packages(后者会破坏系统包管理)。
语法与用法
Debian/Ubuntu:
# 更新软件源
sudo apt update
# 安装 Python 3 及 venv、pip
sudo apt install -y python3 python3-venv python3-pip
# 查看版本
python3 --versionRHEL/Fedora:
# Fedora
sudo dnf install -y python3 python3-pip
# RHEL 9 / Rocky / AlmaLinux
sudo dnf install -y python3 python3-pipArch Linux:
# Arch 通常已预装 python
sudo pacman -S --needed python python-pip详细说明
Debian / Ubuntu 系
方式一:使用系统仓库
# 更新索引
sudo apt update
# 安装
sudo apt install -y python3 python3-venv python3-pip python3-dev
# 验证
python3 --version
pip3 --version方式二:使用 deadsnakes PPA 安装新版
系统仓库的 Python 版本通常滞后,deadsnakes 提供更新版本:
# 安装依赖工具
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
# 查看系统自带版本
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-pipdnf 与 yum
RHEL 8 起 yum 已是指向 dnf 的软链,使用 dnf 即可,二者命令基本一致。
Fedora
# Fedora 滚动较快,仓库中的 Python 版本较新
sudo dnf install -y python3 python3-pip python3-devel
# 查看可用版本
dnf search python3.
# 安装虚拟环境支持(Fedora 已内置 venv)
sudo dnf install -y python3-virtualenvArch Linux / Manjaro
# Arch 的 python 包即最新版
sudo pacman -S --needed python python-pip
# 升级
sudo pacman -Syu python
# 验证
python --versionopenSUSE
# 安装 Python 3
sudo zypper install -y python3 python3-pip python3-devel
# 验证
python3 --versionpyenv(跨发行版通用)
当发行版仓库版本不合适时,pyenv 是最灵活的方案:
# 安装编译依赖(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 配置
# 编辑 ~/.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 $PYTHONUTF8pip 镜像与配置
# 用户级 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 示例:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
trusted-host = pypi.tuna.tsinghua.edu.cn
timeout = 60
[install]
user = trueUpdate Alternatives 切换默认版本
Debian / Ubuntu 上可通过 update-alternatives 管理 python3 指向:
# 注册新版本为候选
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 或虚拟环境。
验证安装
基本验证命令
# 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())"环境自检脚本
"""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()python3 check_env.py实战示例
案例一:Ubuntu 上搭建项目环境
# 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:
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案例二:在服务器上以服务方式运行
# 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
# 使用官方精简镜像
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。 pythonvspython3:多数发行版不提供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-environment | PEP 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 最小权限。
- 定期升级安全补丁:关注 版本生命周期。
下一节
继续学习:源码编译安装