大家好,我是冯哥的缓存。装完日常软件,很多朋友开始问:想在 Linux 上写 Python,怎么配环境?这一篇专门讲 Python 相关的一切——系统自带的Python 够不够用、pip 怎么用不出错、venv 虚拟环境是什么、pyenv 又是干什么的。把这四块搞清楚,Python 开发环境就基本达到了。
先搞清楚:Linux 上 Python 的三种来源
来源 | 安装方式 | 特点 | 推荐程度 |
系统自带 Python | 预装,/usr/bin/python3 | 版本偏旧,是系统工具的依赖,不建议乱动 | ⚠️只读 |
apt 安装 Python | sudo apt install python3.x | 稳定,但版本滞后,Ubuntu 仓库更新慢 | ✅ 日常用 |
pyenv 安装 Python | pyenv install 3.x.x | 可装任意版本,互不干扰,开发首选 | ⭐⭐⭐⭐⭐ |
⚠️注意: Ubuntu 系统自带的 python3是系统工具(如 update-manager、apt)的运行时依赖,绝对不要 sudo apt remove python3或乱改 /usr/bin/python3软链接,否则系统工具可能报错崩溃。
第一步:确认系统现有 Python 版本
python3 --version
which python3
ls /usr/bin/python*
命令 | 作用 |
python3 --version | 查看默认 python3 版本 |
which python3 | 查看 python3 在哪里 |
ls /usr/bin/python* | 列出系统所有 Python 相关可执行文件 |
第二步:用 apt 装额外 Python 版本(简单快速方案)
如果只是写写脚本、不需要频繁切换 Python 版本,用 apt 装就够了。
Ubuntu 添加 deadsnakes PPA(获取新版本)
Ubuntu 官方仓库的 Python 版本比较旧(Ubuntu 22.04 默认是 Python 3.10)。加 deadsnakes PPA 可以装到更新的版本:
sudo add-apt-repository ppa:deadsnakes/ppa
sudo apt update
sudo apt install python3.12 python3.12-venv python3.12-dev
各发行版 apt 装 Python 命令对比
发行版 | 命令 | 说明 |
Ubuntu / Mint | sudo apt install python3.12 python3.12-venv python3.12-dev | 需先加 deadsnakes PPA |
Fedora | sudo dnf install python3.12 | 官方仓库就有 |
Arch | sudo pacman -S python | 滚动更新,永远最新 |
openSUSE | sudo zypper install python312 | 版本号拼在包名里 |
第三步:pip 的正确用法
pip 基础命令速查
命令 | 作用 |
pip3 install requests | 安装包 |
pip3 install requests==2.28.0 | 安装指定版本 |
pip3 install -r requirements.txt | 批量安装依赖 |
pip3 list | 列出已安装的包 |
pip3 show requests | 查看某个包的详情 |
pip3 uninstall requests | 卸载包 |
pip3 install --upgrade requests | 升级包 |
pip3 install requests -i https://pypi.tuna.tsinghua.edu.cn/simple | 使用清华镜像源 |
永久换国内镜像源(重要!)
默认 pip 连接 PyPI(pypi.org)在国内经常超时。永久换成清华镜像:
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
pip3 config set global.trusted-host pypi.tuna.tsinghua.edu.cn
换完之后验证:
pip3 config list
pip 常见报错速查
报错信息 | 原因 | 解决方法 |
error: externally-managed-environment | Ubuntu 22.04+ 保护系统 Python | 用 pip3 install --break-system-packages或改用 venv(推荐) |
command not found: pip | pip 未安装 | sudo apt install python3-pip |
Permission denied | 尝试写入系统目录 | 不加 sudo,改用 venv 或 --user |
Connection timed out | PyPI 国内访问慢 | 换清华/阿里云镜像源 |
No module named pip | pip 模块损坏 | python3 -m ensurepip --upgrade |
Requirement already satisfied | 包已装过,忽略即可 | 无需操作 |
⚠️注意:不要 sudo pip3 install!这会把包装进系统Python,污染系统环境,还可能覆盖系统依赖版本。正确做法是用 venv 或加 --user。
第四步:venv 虚拟环境——每个项目独立一个环境
为什么需要 venv?
假设你有两个项目:
·项目A 需要 Django 3.2
·项目B 需要 Django 4.2
两个版本不能共存于同一个 Python 环境。venv 让每个项目有独立的包空间,互不干扰。
venv 基本用法
#创建虚拟环境(在项目目录下)
python3 -m venv .venv
#激活虚拟环境
source .venv/bin/activate
激活后提示符变为(.venv) username@hostname:~$ ——此后的 pip install都装进虚拟环境,不影响系统。
#安装依赖
pip install django
#导出依赖列表(方便别人复现环境)
pip freeze > requirements.txt
#退出虚拟环境
deactivate
venv 操作对照表
操作 | 命令 |
创建虚拟环境 | python3 -m venv .venv |
激活虚拟环境 | source .venv/bin/activate |
查看当前用哪个 Python | which python |
安装依赖 | pip install 包名 |
导出依赖 | pip freeze > requirements.txt |
批量安装依赖 | pip install -r requirements.txt |
退出虚拟环境 | deactivate |
删除虚拟环境 | rm -rf .venv |
💡提示:虚拟环境目录一般命名为 .venv或 venv,加到 .gitignore里,不要提交到 Git 仓库。
第五步:pyenv——多版本 Python 自由切换
什么时候需要 pyenv?
·需要在 Python 3.8、3.10、3.12之间来回切换
·公司项目指定了特定 Python 版本
·测试代码在不同 Python 版本下的兼容性
pyenv 安装(Ubuntu/Debian)
# 1. 安装依赖
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
# 2. 使用官方安装脚本
curl https://pyenv.run | bash
# 3. 写入~/.bashrc(让 pyenv 每次启动时生效)
echo'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo'eval "$(pyenv init -)"' >> ~/.bashrc
4. 重载配置
source ~/.bashrc
5. 验证安装
pyenv --version
💡提示:如果用 zsh(echo $SHELL显示 /bin/zsh),把上面三行 echo里的 ~/.bashrc改为 ~/.zshrc。
pyenv 常用命令速查
命令 | 作用 |
pyenv install --list | 列出所有可安装的 Python 版本 |
pyenv install --list | grep "3\.1" | 筛选 3.1x 版本 |
pyenv install 3.12.3 | 安装 Python 3.12.3 |
pyenv versions | 列出已安装的所有版本 |
pyenv global 3.12.3 | 全局默认用 3.12.3 |
pyenv local 3.10.14 | 当前目录用 3.10.14(写入 .python-version) |
pyenv shell 3.8.18 | 仅当前 shell 会话用 3.8.18 |
pyenv which python | 查看当前用哪个 Python |
pyenv uninstall 3.8.18 | 卸载某个版本 |
pyenv 版本优先级
级别 | 设置方式 | 作用范围 |
shell(最高) | pyenv shell 3.x.x | 仅当前终端窗口 |
local(次高) | pyenv local 3.x.x | 当前目录及子目录 |
global(最低) | pyenv global 3.x.x | 全局默认 |
pyenv + venv 组合用法(最佳实践)
用 pyenv 管理 Python 版本,用 venv 隔离项目依赖——这是最推荐的搭配:
bash
复制
# 1. pyenv 切换到项目需要的版本
pyenv local 3.10.14
# 2. 用这个版本创建虚拟环境
python -m venv .venv
# 3. 激活虚拟环境
source .venv/bin/activate
# 4. 安装项目依赖
pip install -r requirements.txt
方案对比:我该用哪种方式管理 Python?
场景 | 推荐方案 | 理由 |
写写小脚本,不在乎版本 | apt 安装 + 系统 Python | 最简单,够用 |
一个项目,需要隔离依赖 | apt 安装 + venv | 轻量方案 |
多个项目,不同 Python 版本 | pyenv + venv | 最灵活 |
数据科学/机器学习 | Conda(另见说明) | Conda 包含 Python + 数据科学包生态 |
💡关于 Conda:如果用 PyTorch / TensorFlow / NumPy 等科学计算包,建议单独了解 Miniconda/Anaconda,它有独立的包管理体系,和 apt/pyenv 并行,不冲突。
常见问题速查
问题 | 解决方法 |
python: command not found(只有 python3) | sudo apt install python-is-python3,让 python指向 python3 |
pyenv install 编译很慢 | 正常,编译过程需要5-10分钟,耐心等 |
pyenv install 报编译错误 | 先装依赖(sudo apt install -y build-essential libssl-dev ...),再重试 |
虚拟环境激活后仍用系统 Python | 检查 which python,激活时路径应指向 .venv/bin/python |
pip install 提示 --break-system-packages | 表示在 Ubuntu 22.04+ 系统 Python 下,改用 venv,或加该参数 |
pyenv 安装后 pyenv: command not found | source ~/.bashrc重载配置,或重启终端 |
实战练习
按顺序完成以下操作,把本篇内容串起来:
# 1. 查看系统自带 Python 版本
python3 --version
# 2. 安装pip
sudo apt install python3-pip
# 3. 换清华镜像源
pip3 config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
# 4. 创建一个练习目录
mkdir ~/python-test && cd ~/python-test
# 5. 创建并激活虚拟环境
python3 -m venv .venv
source .venv/bin/activate
# 6. 装一个包测试
pip install requests
python -c "import requests; print(requests.__version__)"
# 7. 导出依赖
pip freeze > requirements.txt
cat requirements.txt
# 8. 退出虚拟环境
deactivate
# 9. 安装pyenv(可选,需要多版本时)
curl https://pyenv.run | bash
source ~/.bashrc
pyenv --version
本篇讲的是 Python 本身的安装和环境管理。IDE(VS Code)的配置放在《Linux开发环境安装攻略(下)》统一讲。
💡下一篇预告:《Linux开发环境安装攻略(中)》讲 Node.js/nvm/Java/sdkman——前端和 Java 开发者的必读内容。