Python venv 详解:为什么要用、怎么用、怎么用好

目录

[一、什么是 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)

Windows(PowerShell)

[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?

venvPython 官方自带的虚拟环境工具(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 项目的"标配基础设施

相关推荐
lly2024063 分钟前
jEasyUI 创建子网格
开发语言
always_TT7 分钟前
内存泄漏是什么?如何避免?
android·java·开发语言
java1234_小锋14 分钟前
Java高频面试题:怎么实现Redis的高可用?
java·开发语言·redis
Alan GEO实施教练18 分钟前
专利申请是否找代理机构:核心考量与决策逻辑拆解
大数据·人工智能·python
oyguyteggytrrwwwrt18 分钟前
抄写YOLOE源码——先抄写ultralytics包,关于__init__.py
开发语言·python
格林威19 分钟前
Baumer相机铝箔表面针孔检测:提升包装阻隔性的 7 个核心策略,附 OpenCV+Halcon 实战代码!
开发语言·人工智能·数码相机·opencv·计算机视觉·c#·工业相机
日出等日落25 分钟前
用 Kavita实现我的远程数字书屋搭建记!
java·开发语言·ide·vscode·编辑器
berryyan26 分钟前
🚀 Windows + RTX 5090 + ComfyUI 桌面版 安装 SageAttention 完全手册
人工智能·python
我是伪码农29 分钟前
JS 复习
开发语言·前端·javascript
沐知全栈开发31 分钟前
键盘快捷键:提升工作效率的利器
开发语言