跳转至

Python 虚拟环境到底是什么?venv、conda、uv 三种方案全面讲清楚

很多刚学 Python 的人都会遇到一个问题:

为什么 Python 项目总是要创建“虚拟环境”?

再往后你会发现,虚拟环境管理工具又有很多:

  • venv
  • conda
  • uv

很多新手看到这里就更迷糊了。

这篇文章会用 最通俗的方式讲清楚三件事:

  1. 为什么 Python 需要虚拟环境
  2. 三种主流方案的底层原理
  3. 各自的优缺点和适用场景

看完基本就不会再被 Python 环境问题困扰。


一、为什么 Python 需要虚拟环境

先看一个非常真实的场景。

假设你电脑里有两个项目:

项目 A 需要:

numpy 1.20

项目 B 需要:

numpy 1.26

但电脑里默认只有一个 Python 环境。

如果你安装:

pip install numpy==1.20

项目 A 可以运行。

但项目 B 可能就报错。

如果你升级:

pip install numpy==1.26

项目 B 又好了,但项目 A 又坏了。

这就是 依赖冲突(Dependency Conflict)

为了解决这个问题,就有了:

虚拟环境(Virtual Environment)

简单理解:

每个项目都有自己独立的 Python 运行空间。

这样:

项目A
  numpy 1.20

项目B
  numpy 1.26

互不影响。


二、Python 虚拟环境的本质

其实虚拟环境没有那么神秘。

本质上它只是:

一个独立的 Python 运行目录

里面通常包含:

python解释器
pip
site-packages(第三方库)

目录结构通常像这样:

env
│
├─ python.exe
├─ Scripts
│
└─ Lib
    └─ site-packages

当你运行 Python 时:

系统会优先使用这个环境里的 Python 和库。

这样就实现了 依赖隔离


三、三种主流虚拟环境方案

目前 Python 生态里最常见的三种方案是:

工具 类型
venv Python 官方虚拟环境
conda 科研计算环境管理器
uv 新一代高速 Python 包管理器

它们解决的问题类似,但 设计思路完全不同


四、venv:最基础的虚拟环境

venv 是 Python 官方自带的工具。

创建环境:

python -m venv .venv

激活环境:

Windows:

.venv\Scripts\activate

macOS/Linux:

source .venv/bin/activate

安装库:

pip install requests

venv 的工作原理

venv 的思路非常简单:

复用系统 Python,只隔离第三方库。

创建环境时:

系统 Python
     │
     ├── venv python
     └── venv site-packages

也就是说:

  • Python 解释器来自系统
  • 第三方库独立存放

所以:

创建环境非常快。


venv 的优点

1️⃣ 轻量
环境通常只有几十 MB。

2️⃣ 官方标准
所有 Python 项目都支持。

3️⃣ 和服务器部署一致
大部分生产环境使用 venv。


venv 的缺点

venv 只管理 Python 包

如果依赖:

C++
CUDA
系统库

安装就可能很麻烦。

例如:

GDAL
PyTorch GPU
OpenCV

有时需要编译环境。


五、conda:科研计算环境

conda 是 Anaconda 提供的环境管理器。

创建环境:

conda create -n myenv python=3.10

激活环境:

conda activate myenv

安装库:

conda install numpy

conda 的工作原理

conda 的设计目标是:

管理整个运行环境,而不仅仅是 Python。

一个 conda 环境通常包含:

Python
C/C++库
系统依赖
DLL
CUDA

结构类似:

envs
│
└── myenv
    │
    ├── python.exe
    ├── site-packages
    ├── DLLs
    └── system libs

所以 conda 环境几乎是:

一个完整的小系统。


conda 的优点

1️⃣ 可以安装复杂依赖

例如:

pytorch
gdal
cudatoolkit

很多库 pip 很难装,但 conda 很简单。


2️⃣ 支持多个 Python 版本

Python 3.6
Python 3.10
Python 3.12

可以同时存在。


3️⃣ 科研生态成熟

很多科学计算库优先支持 conda。


conda 的缺点

1️⃣ 环境比较大
一个环境可能几百 MB。

2️⃣ 依赖解析较慢

创建环境时:

conda solving environment...

可能要等一会。

3️⃣ 与 pip 混用容易出问题。


六、uv:新一代 Python 包管理器

uv 是一个比较新的工具。

特点:

极快。

安装库:

uv pip install requests

创建项目:

uv init

创建虚拟环境:

uv venv

uv 的工作原理

uv 本质上是:

用 Rust 重写了 pip + venv。

主要优化:

  • 并行下载
  • 高速依赖解析
  • 全局缓存

因此速度远快于 pip。

很多情况下:

uv = pip 的 10~100 倍速度

uv 的优点

1️⃣ 非常快

安装库速度远超 pip。


2️⃣ 工具统一

一个工具可以完成:

创建环境
安装依赖
运行项目

3️⃣ 更现代的项目管理

类似:

npm
cargo

uv 的缺点

1️⃣ 不能管理系统依赖

无法处理:

CUDA
C++
系统库

2️⃣ 生态还在发展中。


七、三种方案对比

特性 venv conda uv
是否官方 Python官方 第三方 第三方
管理 Python 包
管理系统库
安装速度 普通 较慢 很快
环境大小
科研支持 一般 很强 一般

八、实际开发如何选择

可以记住一个简单规则:

如果项目是:

Web开发
脚本
API
AI工具

推荐:

venv 或 uv

如果项目是:

科学计算
GPU
GIS
三维计算
工程软件

推荐:

conda

九、总结

Python 虚拟环境的核心目标只有一个:

让每个项目拥有独立的依赖环境。

目前主流方案有三种:

  • venv:官方轻量方案
  • conda:科研计算环境
  • uv:新一代高速工具

三者并不是互相替代的关系,而是 适用于不同场景

理解了它们的原理之后,Python 的环境管理问题基本就不再是问题。