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

工具特点推荐场景
venvPython 内置,轻量大多数 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 进入官网。

关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工的方案、优惠和教程。我们不销售主机,不提供技术服务。

新手必读
搬瓦工优惠码

NODESEEK2026(优惠 6.77%)

购买时填入即可抵扣。