Python 虚拟环境 venv 完整教程
在搬瓦工 VPS 上运行多个 Python 项目时,不同项目可能依赖不同版本的库。Python 虚拟环境(venv)可以为每个项目创建独立的包环境,避免依赖冲突。本文将详细介绍 venv 的使用方法和最佳实践。如果你需要管理多个 Python 版本,可以参考 Pyenv 教程。购买搬瓦工使用优惠码 NODESEEK2026 享 6.77% 折扣。
一、为什么需要虚拟环境
- 依赖隔离:项目 A 需要 Django 4.2,项目 B 需要 Django 5.0,虚拟环境让它们互不冲突。
- 避免污染系统 Python:直接在系统 Python 中安装包可能破坏系统工具。
- 可复现的环境:通过 requirements.txt 精确记录依赖,团队协作和部署更方便。
- 清理方便:删除虚拟环境目录即可彻底清理,不留残留。
二、准备工作
# 确认 Python 版本(需要 3.3+)
python3 --version
# 如果未安装 Python,在 Ubuntu/Debian 上安装
apt update && apt install python3 python3-venv python3-pip -y
# CentOS/RHEL
yum install python3 python3-pip -y
注意:venv 模块是 Python 3.3+ 的标准库组件,但在某些 Linux 发行版上需要单独安装 python3-venv 包。
三、创建虚拟环境
# 进入项目目录
mkdir -p /opt/myproject && cd /opt/myproject
# 创建虚拟环境(推荐命名 .venv 或 venv)
python3 -m venv .venv
# 查看创建的目录结构
ls -la .venv/
# bin/ 包含 python、pip 等可执行文件
# include/ C 头文件
# lib/ 安装的 Python 包
# pyvenv.cfg 虚拟环境配置文件
指定 Python 版本创建
# 使用特定版本的 Python 创建虚拟环境
python3.11 -m venv .venv
python3.12 -m venv .venv
四、激活和退出虚拟环境
# 激活虚拟环境
source .venv/bin/activate
# 激活后命令行提示符会变化
# (.venv) root@host:~#
# 确认使用的是虚拟环境中的 Python
which python
# /opt/myproject/.venv/bin/python
which pip
# /opt/myproject/.venv/bin/pip
# 退出虚拟环境
deactivate
五、管理依赖包
# 激活虚拟环境后安装包
source .venv/bin/activate
# 安装单个包
pip install flask
# 安装指定版本
pip install django==4.2.8
# 安装多个包
pip install flask gunicorn redis
# 查看已安装的包
pip list
# 升级包
pip install --upgrade flask
# 卸载包
pip uninstall flask
5.1 导出和恢复依赖
# 导出当前环境的所有依赖
pip freeze > requirements.txt
# 查看 requirements.txt 内容
cat requirements.txt
# 在另一个环境中恢复依赖
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
5.2 使用 pip-tools 精细管理
# 安装 pip-tools
pip install pip-tools
# 创建 requirements.in(仅列出直接依赖)
cat > requirements.in <<EOF
flask
gunicorn
redis
EOF
# 编译为完整依赖锁文件
pip-compile requirements.in
# 同步安装
pip-sync requirements.txt
六、项目实战示例
以部署一个 Flask 应用为例:
# 创建项目目录
mkdir -p /opt/flask-app && cd /opt/flask-app
# 创建虚拟环境
python3 -m venv .venv
source .venv/bin/activate
# 安装依赖
pip install flask gunicorn
# 创建应用
cat > app.py <<'EOF'
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello from BandwagonHost VPS!'
if __name__ == '__main__':
app.run()
EOF
# 使用 gunicorn 运行
gunicorn -w 4 -b 0.0.0.0:8000 app:app
# 导出依赖
pip freeze > requirements.txt
七、Systemd 服务配置
为 Python 应用创建 systemd 服务,实现开机自启:
# 创建服务文件
cat > /etc/systemd/system/flask-app.service <<'EOF'
[Unit]
Description=Flask Application
After=network.target
[Service]
User=www-data
WorkingDirectory=/opt/flask-app
ExecStart=/opt/flask-app/.venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
# 启动服务
systemctl daemon-reload
systemctl enable flask-app
systemctl start flask-app
systemctl status flask-app
八、venv vs virtualenv vs conda
| 工具 | 特点 | 推荐场景 |
|---|---|---|
| venv | Python 内置,轻量 | 大多数 Python 项目 |
| virtualenv | 第三方,支持 Python 2 | 需要兼容旧版 Python |
| conda | 跨语言,含科学计算包 | 数据科学和机器学习 |
九、最佳实践
- 虚拟环境目录命名统一使用
.venv,方便工具识别。 - 将
.venv/加入.gitignore,不要把虚拟环境提交到 Git。 - 始终使用
requirements.txt记录依赖,确保环境可复现。 - 在生产环境使用
--no-cache-dir安装以节省磁盘空间。 - 定期使用
pip list --outdated检查需要更新的包。
# .gitignore 中添加
echo ".venv/" >> .gitignore
# 生产环境安装(不缓存)
pip install --no-cache-dir -r requirements.txt
总结
Python venv 是管理项目依赖的基础工具,简单高效。在搬瓦工 VPS 上部署 Python 应用时,务必使用虚拟环境隔离依赖。如果需要管理多个 Python 版本,推荐搭配 Pyenv 使用。也可以了解通用版本管理工具 asdf。选购搬瓦工请访问 全部方案,使用优惠码 NODESEEK2026 享 6.77% 折扣,通过 bwh81.net 进入官网。