目录
[一、什么是 venv?](#一、什么是 venv?)
[二、为什么一定要用 venv?(非常重要)](#二、为什么一定要用 venv?(非常重要))
[1️⃣ 不用 venv 会发生什么?](#1️⃣ 不用 venv 会发生什么?)
[2️⃣ venv 解决的核心问题](#2️⃣ venv 解决的核心问题)
[3️⃣ venv 和 Java 的类比(秒懂)](#3️⃣ venv 和 Java 的类比(秒懂))
[三、venv 的基本结构(你看到的到底是什么)](#三、venv 的基本结构(你看到的到底是什么))
[四、如何创建和使用 venv(标准流程)](#四、如何创建和使用 venv(标准流程))
[1️⃣ 创建虚拟环境](#1️⃣ 创建虚拟环境)
[2️⃣ 激活虚拟环境](#2️⃣ 激活虚拟环境)
[Linux / macOS](#Linux / macOS)
[3️⃣ 在 venv 中安装依赖](#3️⃣ 在 venv 中安装依赖)
[4️⃣ 退出虚拟环境](#4️⃣ 退出虚拟环境)
[五、如何确认你真的在用 venv?(排错必会)](#五、如何确认你真的在用 venv?(排错必会))
[✅ 看 python 路径](#✅ 看 python 路径)
[✅ 看 pip 路径](#✅ 看 pip 路径)
[❌ 常见错误](#❌ 常见错误)
[六、requirements.txt:venv 的灵魂搭档](#六、requirements.txt:venv 的灵魂搭档)
[1️⃣ 导出依赖](#1️⃣ 导出依赖)
[2️⃣ 一键恢复环境(部署神器)](#2️⃣ 一键恢复环境(部署神器))
[七、venv vs virtualenv vs conda](#七、venv vs virtualenv vs conda)
[八、生产环境使用 venv 的最佳实践(重点)](#八、生产环境使用 venv 的最佳实践(重点))
[✅ 1. venv 和项目放一起](#✅ 1. venv 和项目放一起)
[✅ 2. 不要把 venv 提交到 Git](#✅ 2. 不要把 venv 提交到 Git)
[✅ 3. systemd / shell 脚本中明确使用 venv](#✅ 3. systemd / shell 脚本中明确使用 venv)
[✅ 4. 不依赖 activate(非常重要)](#✅ 4. 不依赖 activate(非常重要))
[九、你之前 Label Studio 场景,其实就是 venv 的典型用法](#九、你之前 Label Studio 场景,其实就是 venv 的典型用法)
一、什么是 venv?
venv 是 Python 官方自带的虚拟环境工具(Python 3.3+ 内置),用于:
为某一个 Python 项目创建"独立的运行环境"
在这个环境里:
-
Python 解释器是独立的
-
第三方库是独立的
-
不影响系统 Python
-
不影响其他项目
一句话理解:
venv = 项目级 Python 运行环境隔离器
二、为什么一定要用 venv?(非常重要)
1️⃣ 不用 venv 会发生什么?
假设你有两个项目:
-
项目 A:需要
Django==3.2 -
项目 B:需要
Django==4.2
如果你直接:
pip install django
结果只能二选一,另一个项目直接炸 💥
2️⃣ venv 解决的核心问题
| 问题 | venv 是否解决 |
|---|---|
| 依赖冲突 | ✅ |
| 多项目共存 | ✅ |
| 系统 Python 被污染 | ❌ |
| 版本可复现 | ✅ |
| 部署一致性 | ✅ |
3️⃣ venv 和 Java 的类比(秒懂)
| Java | Python |
|---|---|
| Maven 本地仓库 | pip cache |
| JDK 版本 | Python 解释器 |
| 项目 classpath | venv |
👉 每个项目一个 venv = 每个项目一个 classpath
三、venv 的基本结构(你看到的到底是什么)
创建一个 venv 后,目录通常是这样:
venv/ ├── bin/ # Linux / macOS 可执行文件 │ ├── python │ ├── pip │ └── activate ├── lib/ │ └── python3.x/ │ └── site-packages/ # 第三方库都在这 ├── include/ └── pyvenv.cfg
📌 重点记住这 3 点:
-
bin/python:这个环境专用的 Python -
bin/pip:只给这个环境装包 -
site-packages:库真正存放的位置
四、如何创建和使用 venv(标准流程)
1️⃣ 创建虚拟环境
python3 -m venv venv
推荐命名:
-
venv -
.venv
2️⃣ 激活虚拟环境
Linux / macOS
source venv/bin/activate
Windows(PowerShell)
venv\Scripts\Activate.ps1
激活成功后,终端前面会看到:
(venv) user@host:~$
3️⃣ 在 venv 中安装依赖
pip install requests flask
📌 只会安装到当前 venv,不影响系统
4️⃣ 退出虚拟环境
deactivate
五、如何确认你真的在用 venv?(排错必会)
✅ 看 python 路径
which python
输出应类似:
/path/to/project/venv/bin/python
✅ 看 pip 路径
which pip
❌ 常见错误
pip install xxx python app.py
但 python 不是 venv 的 python → 白装
六、requirements.txt:venv 的灵魂搭档
1️⃣ 导出依赖
pip freeze > requirements.txt
2️⃣ 一键恢复环境(部署神器)
python -m venv venv source venv/bin/activate pip install -r requirements.txt
👉 这一步就是"环境可复现"的核心
七、venv vs virtualenv vs conda
| 工具 | 特点 | 推荐场景 |
|---|---|---|
| venv | 官方、轻量 | Web / 脚本 / 服务 |
| virtualenv | 功能更多 | 老项目 |
| conda | 带 Python + C 库 | 数据科学 / AI |
📌 你的场景(服务 + 脚本)→ venv 是最合适的
八、生产环境使用 venv 的最佳实践(重点)
✅ 1. venv 和项目放一起
project/ ├── venv/ ├── app.py ├── requirements.txt
✅ 2. 不要把 venv 提交到 Git
.gitignore:
venv/ .venv/
✅ 3. systemd / shell 脚本中明确使用 venv
❌ 不要这样:
java app.py
✅ 要这样:
/opt/app/venv/bin/python app.py
✅ 4. 不依赖 activate(非常重要)
生产环境推荐写死解释器路径
/opt/app/venv/bin/python main.py
比 source activate 稳定得多。
九、你之前 Label Studio 场景,其实就是 venv 的典型用法
你现在的路径:
/data/labelstudio/venv/bin/label-studio
说明:
-
Label Studio 依赖都在这个 venv
-
系统 Python 是干净的
-
升级、删除都不影响系统
👉 这是标准、正确、专业的用法
十、常见坑总结(一定要避)
❌ venv 里装包,系统 python 跑
❌ 删除 venv 却不重新 install
❌ 多个项目共用一个 venv
❌ requirements.txt 不更新
一句话总结(记住这个)
venv 不是"可选项",而是 Python 项目的"标配基础设施