当前位置: 首页 > news >正文

Python 包管理工具推荐:uv

目录

  • 简介
    • 核心特性
  • 安装 uv
    • Linux / macOS / WSL
    • Windows
  • Python 版本管理
    • 安装和管理 Python 版本
  • 项目环境管理
    • 为新项目创建环境
    • 为已有代码创建环境
  • 依赖管理
    • 添加依赖
    • 从已有依赖文件迁移
      • 从 requirements.txt 导入
      • 使用已有 pyproject.toml
  • 运行代码
    • 使用 uv run(推荐)
    • 传统方式(激活环境)
    • 直接使用环境 Python
  • 常用工作流
    • 场景 1:开始新项目
    • 场景 2:接手已有项目(无依赖文件)
    • 场景 3:接手有 requirements.txt 的项目
    • 场景 4:多项目并行开发
  • 在 WSL 中使用 uv
  • 常用命令速查
    • 项目管理
    • 依赖管理
    • Python 版本
    • 查看信息
  • 项目结构
  • 最佳实践
  • 迁移指南
    • 从 pip + virtualenv 迁移
    • 从 Poetry 迁移
    • 从 Conda 迁移
  • 故障排查
    • 包安装失败
    • 找不到包
    • Python 版本问题
  • 总结
  • 参考资源

简介

uv 是超快速 Python 包管理器和项目管理工具,使用 Rust 编写,速度比 pip 快 10-100 倍。它不仅可以管理包依赖,还能管理多个 Python 版本和虚拟环境。

核心特性

  • 极速安装:Rust 编写,包安装速度极快
  • 多版本管理:轻松管理和切换不同 Python 版本
  • 统一工具:集成包管理、环境管理、版本管理于一体
  • 跨平台支持:完美支持 Linux、macOS、Windows 和 WSL

安装 uv

Linux / macOS / WSL

# 推荐方式
curl -LsSf https://astral.sh/uv/install.sh | sh# 或通过 pip
pip install uv

Windows

powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Python 版本管理

安装和管理 Python 版本

# 安装特定版本
uv python install 3.11
uv python install 3.12
uv python install 3.13# 查看已安装版本
uv python list# 查看可用版本
uv python list --all-versions# 设置项目默认版本
uv python pin 3.12

项目环境管理

为新项目创建环境

# 创建新项目
uv init myproject --python 3.11
cd myproject# 创建虚拟环境
uv venv# 添加依赖
uv add requests pandas numpy

为已有代码创建环境

# 在现有项目目录下
cd your_existing_project# 初始化 uv 项目(不会覆盖已有文件)
uv init# 创建虚拟环境
uv venv# 添加已知的依赖
uv add openai pandas numpy

依赖管理

添加依赖

# 添加运行时依赖
uv add package-name# 添加指定版本
uv add "openai==1.12.0"
uv add "pandas>=2.0.0"# 添加开发依赖
uv add --dev pytest black ruff# 添加可选依赖组
uv add --optional docs sphinx

从已有依赖文件迁移

从 requirements.txt 导入

# 方法 1:一次性导入到 pyproject.toml
cat requirements.txt | grep -v "^#" | grep -v "^$" | xargs uv add# 方法 2:只安装到环境(不修改 pyproject.toml)
uv pip install -r requirements.txt# 方法 3:逐个添加(更可控)
uv add openai pandas numpy

使用已有 pyproject.toml

# 自动读取并同步依赖
uv sync# 这会:
# 1. 读取 pyproject.toml 中的依赖
# 2. 创建/更新虚拟环境
# 3. 安装所有依赖
# 4. 生成 uv.lock 锁文件

运行代码

使用 uv run(推荐)

# 运行 Python 脚本
uv run python script.py# 运行模块
uv run python -m pytest# 启动交互式 Python
uv run python# 运行其他工具
uv run jupyter notebook
uv run flask run
uv run pytest tests/

优势:

  • 无需手动激活环境
  • 自动使用项目的虚拟环境和依赖
  • 简洁高效

传统方式(激活环境)

# 激活虚拟环境
source .venv/bin/activate  # Linux/macOS
.venv\Scripts\activate     # Windows# 运行代码
python script.py# 退出环境
deactivate

直接使用环境 Python

# 不激活环境,直接调用
.venv/bin/python script.py

常用工作流

场景 1:开始新项目

# 创建项目
uv init my-app --python 3.12
cd my-app# 添加依赖
uv add fastapi uvicorn sqlalchemy# 添加开发工具
uv add --dev pytest black ruff# 运行项目
uv run python main.py

场景 2:接手已有项目(无依赖文件)

# 进入项目目录
cd existing-project# 初始化
uv init
uv venv# 尝试运行,根据报错添加依赖
uv run python main.py
# ModuleNotFoundError: No module named 'openai'# 添加缺失的包
uv add openai pandas# 继续运行
uv run python main.py

场景 3:接手有 requirements.txt 的项目

cd project-with-requirements# 初始化并导入依赖
uv init
uv venv
cat requirements.txt | grep -v "^#" | xargs uv add# 同步环境
uv sync# 运行项目
uv run python app.py

场景 4:多项目并行开发

# 项目 A - Python 3.11
cd project-a
uv init --python 3.11
uv add django# 项目 B - Python 3.12
cd ../project-b
uv init --python 3.12
uv add flask# 各自运行,互不干扰
cd ../project-a && uv run python manage.py runserver
cd ../project-b && uv run python app.py

在 WSL 中使用 uv

uv 在 WSL 环境中表现优异,与原生 Linux 体验一致:

# 安装
curl -LsSf https://astral.sh/uv/install.sh | sh# 使用方式完全相同
uv init myproject
uv add pandas numpy
uv run python script.py

WSL 优势:

  • 性能优秀,安装速度极快
  • 无缝集成 Windows 和 Linux 工作流
  • 与 VS Code Remote 完美配合

常用命令速查

项目管理

uv init [project]          # 初始化项目
uv venv                    # 创建虚拟环境
uv sync                    # 同步依赖
uv run <command>           # 运行命令

依赖管理

uv add <package>           # 添加依赖
uv add --dev <package>     # 添加开发依赖
uv remove <package>        # 移除依赖
uv pip install <package>   # 直接安装(不更新配置)
uv pip list                # 列出已安装包

Python 版本

uv python install <ver>    # 安装 Python 版本
uv python list             # 列出已安装版本
uv python pin <ver>        # 固定项目版本

查看信息

uv run python --version    # 查看项目 Python 版本
uv run which python        # 查看 Python 路径
uv pip show <package>      # 查看包信息

项目结构

使用 uv 管理的项目典型结构:

my-project/
├── .venv/              # 虚拟环境(可选加入 .gitignore)
├── pyproject.toml      # 项目配置和依赖声明
├── uv.lock            # 依赖版本锁定
├── src/               # 源代码
│   └── main.py
└── tests/             # 测试代码└── test_main.py

pyproject.toml 示例:

[project]
name = "my-project"
version = "0.1.0"
description = "My awesome project"
requires-python = ">=3.11"
dependencies = ["openai>=1.0.0","pandas>=2.0.0","numpy",
][project.optional-dependencies]
dev = ["pytest>=7.0.0","black>=23.0.0","ruff>=0.1.0",
][build-system]
requires = ["hatchling"]
build-backend = "hatchling.build"

最佳实践

  1. 始终使用 uv run:避免手动激活环境,减少出错
  2. 提交 uv.lock:确保团队依赖版本一致
  3. .venv 加入 .gitignore:虚拟环境不应提交到版本控制
  4. 开发依赖分离:使用 --dev 标记开发工具
  5. 固定 Python 版本:使用 uv python pin 确保团队版本一致

迁移指南

从 pip + virtualenv 迁移

# 旧方式
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt# 新方式
uv venv
cat requirements.txt | xargs uv add
uv sync

从 Poetry 迁移

# Poetry 的 pyproject.toml 可以直接使用
uv sync# 或导出后导入
poetry export -f requirements.txt -o requirements.txt
cat requirements.txt | xargs uv add

从 Conda 迁移

# 导出 Conda 环境
conda list -e > requirements.txt# 用 uv 重建
uv init
cat requirements.txt | xargs uv add

故障排查

包安装失败

# 清除缓存重试
uv cache clean
uv sync

找不到包

# 验证包名
uv pip search <package-name># 或直接搜索 PyPI

Python 版本问题

# 查看当前版本
uv run python --version# 切换版本
uv python pin 3.12
uv venv --python 3.12

总结

uv 是新一代 Python 工具链的代表,它:

  • :Rust 实现,速度远超传统工具
  • :统一界面,一个工具管理所有
  • :锁文件机制,确保环境可复现
  • :现代化设计,符合当前最佳实践

如果你厌倦了 pip、virtualenv、pyenv 的组合拳,或者想要更快的包管理体验,uv 是你的理想选择。

参考资源

  • uv 官方文档
  • GitHub 仓库
  • PyPI 页面

最后更新:2025年10月

http://www.hskmm.com/?act=detail&tid=36210

相关文章:

  • 3D框预测 VoxelNeXt - MKT
  • 【神器】如何查看api域名内容
  • 高级程序语言第二次作业
  • 【ESP32-LLM项目】计算音频信号RMS值的函数
  • Linux消息队列如何查看与排查问题?
  • CF2007B Index and Maximum Value
  • 2022 ICPC Jinan DG and 2022 ICPC Nanjing
  • 图像分割 sam1 - MKT
  • SDL-1
  • CF1206B Make Product Equal One
  • 软件工程第三次作业----结对项目
  • 关于莫比乌斯函数的应用1
  • 用deepseek写的一个求原根的程序
  • 操作备忘:在AE中让视频中间部分变慢
  • 记一次精简系统Windows11英文版离线安装中文语言包的过程
  • 阿里巴巴数据库开发手册
  • AI元人文:赋能公共治理、司法与监管的价值权衡新范式
  • 基础的sql练习,全都理解你就是高手了!
  • nginx快速实现平滑版本升级
  • Luogu P11159 【MX-X6-T5】 再生 题解 [ 蓝 ] [ 前缀和 ] [ 组合计数 ]
  • 王浩宇 102500416
  • 程序员修炼之路:从小工到专家 读书笔记 2
  • 程序员修炼之路:从小工到专家 读书笔记 3
  • 中级问题
  • 2025.10.21
  • 解答在同步以太坊事件数据时,如何保证后端服务在 API/RPC 不稳定情况下的可用性
  • 程序员修炼之道:从小工到专家 读书笔记 1
  • 好想好想你
  • 10.21日学习笔记
  • 数据库概述