Python 是当前最受欢迎的编程语言之一,广泛用于 Web 开发(Django/Flask/FastAPI)、数据处理、自动化脚本和机器学习。在搬瓦工 VPS 上,Debian/Ubuntu 已预装 Python 3,但生产环境的最佳实践是隔离每个项目的依赖——本文介绍 python3/pip 的基础用法、venv 虚拟环境的创建与管理,以及 pyenv 多版本管理工具。
本文要点
- 确认系统 Python 3 版本与 pip 安装
- venv 创建和使用隔离虚拟环境
- requirements.txt 依赖管理
- pyenv 安装与多版本管理
确认 Python 3 与安装 pip
python3 --version # 查看系统 Python 3 版本
apt install -y python3-pip # 安装 pip(如未安装)
pip3 --versionDebian/Ubuntu 系统 Python 不建议 pip install 到系统
直接向系统 Python 安装包会污染系统环境,某些发行版也已禁止(PEP 668)。请始终在虚拟环境中安装包。
使用 venv 创建虚拟环境
创建虚拟环境
apt install -y python3-venv # 确保 venv 模块可用
# 在项目目录创建虚拟环境
cd /srv/myproject
python3 -m venv .venv激活虚拟环境
source .venv/bin/activate
# 激活后提示符变为 (.venv) ...
python --version # 此时 python 指向虚拟环境的 Python
pip --version # pip 也是虚拟环境内的在虚拟环境中安装包
pip install flask
pip install requests
pip list # 列出已安装包导出与复现依赖
pip freeze > requirements.txt # 导出依赖列表
pip install -r requirements.txt # 在新环境复现依赖退出虚拟环境
deactivate虚拟环境目录结构
| 路径 | 说明 |
|---|---|
| .venv/bin/ | python、pip 等可执行文件 |
| .venv/lib/pythonX.Y/site-packages/ | 已安装的包 |
| .venv/pyvenv.cfg | 虚拟环境配置(Python 版本等) |
不要把 .venv 目录提交到版本库
虚拟环境包含大量二进制文件,应加入
.gitignore。用 requirements.txt 描述依赖,在新环境重新创建虚拟环境。使用 pyenv 管理多版本 Python
如果需要在同一台服务器运行多个 Python 版本(如 3.9、3.11、3.12),pyenv 是最好的选择:
安装 pyenv 依赖
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 https://pyenv.run | bash
# 将以下内容追加到 ~/.bashrc
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
source ~/.bashrc安装与使用指定 Python 版本
pyenv install --list | grep "3\.1" # 查看可安装的 3.1x 版本
pyenv install 3.12.4 # 安装指定版本
pyenv global 3.12.4 # 全局使用
pyenv local 3.11.9 # 仅当前目录使用
pyenv versions # 列出已安装版本小结
- 每个项目用独立的 venv 虚拟环境,避免依赖冲突
- requirements.txt 记录依赖,方便迁移和协作
- pyenv 管理多版本,按项目灵活切换
- 不要直接向系统 Python 安装包
常见问题
pip install 提示 externally-managed-environment 怎么办?
这是 PEP 668 保护机制,防止污染系统。请在 venv 虚拟环境内安装,或使用 pipx 安装独立工具。
虚拟环境和 pyenv 能一起用吗?
完全可以。pyenv 管理 Python 版本,venv 管理项目依赖,两者配合使用是最佳实践:先用 pyenv local 指定版本,再用 python -m venv .venv 创建环境。
如何在 systemd 服务中使用虚拟环境的 Python?
在 systemd unit 文件的 ExecStart 中使用虚拟环境的绝对路径:ExecStart=/srv/myproject/.venv/bin/python app.py,不需要 activate。