uv
uv 与 Conda / environment.yml 使用总结
1. uv 和 Conda 的关系
两者都有 Python 环境和包管理功能,但定位不同:
| 功能 | Conda | uv |
|---|---|---|
| Python 版本管理 | ✅ | ✅ |
| 虚拟环境 | ✅ | ✅ |
| Python 包管理 | ✅ | ✅ |
| PyPI 包 | ✅ | ✅ |
pyproject.toml |
部分支持 | 核心支持 |
| Lock 文件 | 需要额外工具 | uv.lock |
| CUDA / C/C++ 库 | 强项 | ❌ 不是主要用途 |
| 系统级二进制依赖 | 可以管理 | ❌ |
| 安装速度 | 较慢 | 很快 |
可以简单理解为:
Conda
= Python 环境 + Python 包 + 非 Python 二进制依赖
uv
= Python 环境 + Python 包 + 项目依赖/Lock
2. 常见命令对应关系
Conda
conda create -n myenv python=3.11
conda activate myenv
conda install numpy
pip install torch
uv
uv python install 3.11
uv venv --python 3.11
source .venv/bin/activate
uv pip install numpy
uv pip install torch
现代 uv 项目更推荐:
uv init
uv add numpy torch
uv sync
对应关系大致为:
conda create → uv venv
conda activate → source .venv/bin/activate
conda install → uv pip install / uv add
environment.yml → pyproject.toml
conda-lock → uv.lock
3. environment.yml 能不能直接给 uv 用?
不能直接使用。
例如:
name: myenv
dependencies:
- python=3.11
- numpy
- scipy
- pip:
- torch
- opencv-python
这是 Conda 的环境定义文件。
应该使用:
conda env create -f environment.yml
而不是:
uv ...
uv 没有原生的:
uv create -f environment.yml
4. 如果想从 environment.yml 迁移到 uv
不要机械地把所有依赖转换过去。
应该先区分:
environment.yml
│
├── Python
│
├── PyPI Python packages
│
├── Conda Python packages
│
├── CUDA runtime
│
├── C/C++ libraries
│
├── 编译工具链
│
└── Linux 系统库
其中主要可以迁移到 uv 的是:
Python
+
PyPI packages
最终变成:
project/
├── pyproject.toml
├── uv.lock
└── .venv/
5. uv 和 CUDA
需要特别区分:
NVIDIA Driver
↓
CUDA Toolkit
↓
CUDA Runtime
↓
PyTorch
uv 可以安装
Python 环境中的 CUDA runtime,例如:
uv pip install nvidia-cuda-runtime-cu12
以及其他 Python CUDA wheels。
uv 不负责完整安装
例如:
/usr/local/cuda/
├── bin/nvcc
├── include/
├── lib64/
└── ...
这种完整的 CUDA Toolkit 应该通过 NVIDIA 官方安装方式、系统包管理器或 Conda 等方式处理。
所以:
uv pip install nvidia-cuda-runtime-cu12
≠ 安装完整 CUDA Toolkit。
6. 你上传的 environment.yml
这个文件是一个比较典型的 Linux + NVIDIA CUDA + PyTorch Conda 环境。
其中核心版本关系是:
Python 3.9.18
PyTorch 2.0.1
CUDA 11.8
cuDNN 8.7
TorchVision 0.15.2
TorchAudio 2.0.2
PyTorch3D 0.7.4
Open3D 0.17.0
尤其重要的是:
PyTorch 2.0.1
↓
CUDA 11.8
↓
PyTorch3D 0.7.4
其中:
PyTorch3D 0.7.4
对:
Python 3.9
PyTorch 2.0.1
CUDA 11.8
存在较强的版本耦合。
因此不建议直接把这个 environment.yml 全部转换成 uv add。
7. 这个环境的正确迁移思路
如果目标是复现原来的环境:
environment.yml
│
↓
Conda
│
├── Python
├── CUDA
├── PyTorch
├── PyTorch3D
└── 底层库
这是最稳妥的方式。
如果目标是把项目迁移到 uv:
environment.yml
│
↓
分析依赖
│
┌──────┴────────┐
↓ ↓
Python/PyPI Conda/CUDA/系统库
↓ ↓
uv 保留系统/Conda
│
↓
pyproject.toml
│
↓
uv.lock
8. 针对你的情况
你目前涉及:
OpenUSD
Isaac Sim / Isaac Lab
CUDA
PyTorch
Blender
ROS
Python
因此不应该简单采用:
“以后全部从 Conda 换成 uv”
更合理的是:
项目环境
│
┌───────────┴───────────┐
↓ ↓
系统/底层环境 Python环境
│ │
NVIDIA Driver uv
CUDA Toolkit │
C/C++ .venv
OpenUSD │
ROS ├── PyTorch
├── NumPy
├── OpenCV
└── 其他 PyPI 包
一句话:
environment.yml是 Conda 环境定义;uv 不能直接读取它。对于普通 Python 项目,可以迁移成pyproject.toml + uv.lock;对于你这个包含 CUDA、PyTorch3D 和大量 Conda 底层库的环境,应该先拆分依赖,再决定哪些交给 uv、哪些继续由 Conda/系统管理。