1.为什么我们需要虚拟环境?
依赖冲突:项目 A 需要 Django 2.x,项目 B 需要 Django 4.x,全局安装会导致一个项目崩溃。
环境复现困难:代码在自己电脑上能跑,发给同事或部署到服务器就报错(“在我机子上明明能跑”的经典噩梦)。
全局环境污染:随意安装和卸载包,导致系统 Python 环境变得极其混乱且难以清理。
2.虚拟环境到底是什么?
隔离机制:虚拟环境本质上是一个独立的文件夹,里面包含了专属的 Python 解释器和第三方包(site-packages)。
独立性:激活虚拟环境后,所有的 pip install 操作都只会影响当前环境,与系统全局环境和其他项目完全隔离。
3.主流虚拟环境
| 工具 | 定位与特点 | 适用场景 |
|---|---|---|
| venv | Python 3.3+ 内置,零依赖,最轻量 | 简单项目、初学者入门、CI/CD 流程 |
| uv | 新世代工具(Rust 开发),极速(比 pip 快百倍) | 追求极致速度的现代项目、大型 Web 应用 |
| conda | 强大的包与环境管理器,擅长处理非 Python 依赖(如 CUDA, MKL) | 数据科学、机器学习、AI 深度学习 |
conda下载时要注意 Anaconda 和 Miniconda 是同一个东西
![]()
Anaconda 是为了“省事”而牺牲了空间,适合新手快速上手;Miniconda 是为了“效率”而牺牲了便利,适合追求极致和定制化的进阶用户。 |
4. 实战演练:
提供一套标准、可复制的操作流程,覆盖虚拟环境的完整生命周期:
-
创建环境:
python -m venv .venv(建议统一命名为.venv或venv)。 -
激活环境:
- Windows (CMD/PowerShell):
.venv\Scripts\activate - Linux/macOS:
source .venv/bin/activate
- Windows (CMD/PowerShell):
-
验证环境:使用
which python(Linux/Mac) 或where python(Windows) 查看当前 Python 路径,确认是否指向了虚拟环境内部。
-
安装依赖:
pip install requests等常规操作。 -
小问题一:pip 是什么(默认已安装,无需额外安装)?
-
pip 是 Python 自带的的包管理器。pip 从 PyPI(Python 官方第三方库)下载包,把包安装到当前 Python 环境的 site-packages,并记录版本信息,供 import 使用。
-
小问题二:那 pip 和虚拟环境有啥关系?
-
我们都知道,虚拟环境就是为了在不同项目中用不同或不同版本的包的。既然要安装特定版本的包,不就自然要用到 pip 了吗。 虚拟环境决定“装到哪”,而 pip 负责“装什么”
-
举例:
(.venv) shengge@shengge:~/PycharmProjects/base$ pip install rich -
退出与删除:使用
deactivate退出;直接删除.venv文件夹即可彻底清除环境。
5. 进阶与协作:如何让环境“可复现”
- 依赖导出:使用
pip freeze > requirements.txt生成依赖清单。
-
环境复现:同事或服务器通过
pip install -r requirements.txt一键还原一模一样的开发环境。 -
进阶技巧:
- 指定特定的 Python 版本创建环境,会在虚拟环境中自己下载特定版本python(如
python3.9 -m venv myenv)。 - 开发与生产依赖的分离(
requirements-dev.txt与requirements.txt)。
- 指定特定的 Python 版本创建环境,会在虚拟环境中自己下载特定版本python(如
6. 避坑
- 致命陷阱:忘记激活环境就安装包,导致包被装到了全局。
- IDE 集成:在pycharm右下角可以选择不同的虚拟环境
- 命名规范:不要使用
env1,test这种随意的名字,推荐使用.venv统一命名,并在.gitignore中忽略该文件夹,不要将虚拟环境上传到 GitHub。