视频教程
问题导向
- 很多的 Python 依赖(轮子)版本是相耦合的,但是系统总体的 Python 环境是唯一的,如果想运行不同依赖版本下的项目代码,就需要重复性的卸载和删除这些库
- 有时候单纯的想试一下某个轮子,但是还担心安装之后卸载不干净
- 一些 Python 环境是不带包管理器 pip 的,例如单纯的 cPython
解决方案
- 针对依赖关系,使用虚拟环境
- 针对没有 pip 的情况,使用 Python 环境变量,或者自己补个 pip
Conda是这样
- 创建完全隔离的运行环境,还能装 C/C++、R、CUDA、MKL、FFmpeg 等非 Python 二进制
- 安装前先计算整体依赖闭包,发现冲突会拒绝执行
- 体积大、启动慢,但是完全独立,就是不要求 conda 环境外部的系统环境有 Python
conda create -n env、conda install xxx
UV 能做到
- 快速创建虚拟环境,管理依赖
- 直接补 pip,在虚拟环境随便用
- 轻量、块,安装轻量、用起来快
UV有哪些操作
uv venv创建虚拟环境,可以直接在虚拟环境下使用传统的requirements文件和基本的 pip 操作直接用uv init myproj创建标准的 uv 项目骨架UV 基本项目骨架 uv init myproj # 生成 # myproj/ # ├── .python-version (可选,pin 3.11 等) # ├── pyproject.toml 项目元数据+依赖 # ├── README.md # ├── .gitignore # └── src/ # └── myproj/ # └── __init__.pyuv add xxx在UV项目中添加依赖uv sync根据 lock 文件一键同步环境(一次性装好)uv 比较轻量,并且比 python 自带的虚拟环境更加强大
UV的局限性
- 默认可以切换的 Python 版本的范围有限(3.8.0 – 3.13 )
Python自带的
- Python 3.3 开始自带虚拟环境的功能
- python -m venv 环境名 # 例如 python -m venv venv
- 这个跟uv中直接创建的虚拟环境的形式一样,但是具体实现不一样,uv的更快