视频教程

问题导向

  • 很多的 Python 依赖(轮子)版本是相耦合的,但是系统总体的 Python 环境是唯一的,如果想运行不同依赖版本下的项目代码,就需要重复性的卸载和删除这些库
  • 有时候单纯的想试一下某个轮子,但是还担心安装之后卸载不干净
  • 一些 Python 环境是不带包管理器 pip 的,例如单纯的 cPython

解决方案

  • 针对依赖关系,使用虚拟环境
  • 针对没有 pip 的情况,使用 Python 环境变量,或者自己补个 pip

Conda是这样

  • 创建完全隔离的运行环境,还能装 C/C++、R、CUDA、MKL、FFmpeg 等非 Python 二进制
  • 安装前先计算整体依赖闭包,发现冲突会拒绝执行
  • 体积大、启动慢,但是完全独立,就是不要求 conda 环境外部的系统环境有 Python
  • conda create -n envconda 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__.py
    
  • uv 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的更快

完整资料