Python 包管理工具推荐:uv

news/2025/10/22 2:33:44/文章来源:https://www.cnblogs.com/LexLuc/p/19156764

目录

  • 简介
    • 核心特性
  • 安装 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.mzph.cn/news/942816.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

图像分割 Segment Anything(3)分割2D到3D点云分割 rgb相机 - MKT

图像分割 Segment Anything(3)分割2D到3D点云分割 rgb相机 https://github.com/Pointcept/SegmentAnything3D

3D框预测 VoxelNeXt - MKT

3D框预测 VoxelNeXthttps://github.com/dvlab-research/VoxelNeXt

【神器】如何查看api域名内容

查看API域名内容的方法有多种,包括使用在线工具、浏览器插件、命令行工具等。通过这些工具,你可以轻松获取API的响应数据、测试API的可用性、检查API的性能。 其中,常见的方法包括使用Postman、cURL命令行工具、浏览…

高级程序语言第二次作业

高级程序语言第二次作业这个作业属于哪个课程 https://edu.cnblogs.com/campus/fzu/gjyycx这个作业要求在哪里 https://edu.cnblogs.com/campus/fzu/gjyycx/homework/13570学号 222200424姓名 赵伟豪目录高级程序语言第…

【ESP32-LLM项目】计算音频信号RMS值的函数

下面这个函数是什么作用 float calculateRMS(uint8_t *buffer, int bufferSize) {float sum = 0;int16_t sample;for (int i = 0; i < bufferSize; i += 2){sample = (buffer[i + 1] << 8) | buffer[i];sum +…

Linux消息队列如何查看与排查问题?

在Linux系统中,消息队列(Message Queue)是一种进程间通信(IPC)机制,允许不同进程之间以异步方式交换数据,查看和管理消息队列对于系统调试、性能优化和进程通信分析至关重要,本文将详细介绍Linux消息队列的查看…

CF2007B Index and Maximum Value

CF2007B Index and Maximum Value思路 如果真的按照题意思路写模拟代码,时间复杂度为O(n*m); 那就换思维:假设当前最大值是 mx如果 mx在区间内,它必然会被操作影响。 所有等于 mx的值都一起加/减; 所以新最大值就是…

图像分割 sam1 - MKT

图像分割 sam1 版本1 https://github.com/facebookresearch/segment-anything?tab=readme-ov-file#model-checkpoints 最新的是2 https://github.com/facebookresearch/sam2环境 cuda11.8 配置全图检测 import nu…

2022 ICPC Jinan DG and 2022 ICPC Nanjing

2022 ICPC Jinan DG and 2022 ICPC Nanjing 2022 Jinan D 需要考虑的地方是 ? 类型的提交,对于每种这样的提交,我们可以算出它可产生的最小罚时和最大罚时。于是我们单独考虑这样的提交,二进制枚举那些提交过了,…

你的开发服务器在说谎-热重载与热重启的关键区别

GitHub 主页 你的开发服务器在说谎:热重载与热重启的关键区别 🔥🔄🚀 作为开发者,我们都迷恋那种“心流”状态。当你全神贯注,代码从指尖流淌而出,每一次保存,终端里的服务就自动重启,浏览器一刷新,新的变…

SDL-1

1.https://www.cppgamedev.top/courses/sdl-space-shooter/parts/sdl-fundamentals 练习3:添加音效播放功能(使用Mix_LoadWAV和Mix_PlayChannel函数) 1.SDL使用的音频数据结构 chunk完全预先加载进内存的文件 music …

CF1206B Make Product Equal One

CF1206B Make Product Equal One题目描述 给你一个有 n 个数的数组。你可以用 x(x为任意正整数) 的代价将数组中的任意一个数增加或减少 x ,你可以重复多次此操作。现在需要你用若干次操作使得 a_1a_2...a_n = 1 (数组…

关于莫比乌斯函数的应用1

include include include include include using namespace std; // 快速幂算法:计算 (a^b) % mod long long fast_power(long long a, long long b, long long mod) { long long result = 1; a = a % mod; whil…

关于莫比乌斯函数的应用

include include include int main() { constexpr int M = 20101009; int n, m; std::cin >> n >> m; if (n > m) std::swap(n, m); std::vector f(n + 1), vis(n + 1), prime; prime.reserve(n); f…

软件工程第三次作业----结对项目

一、作业信息github网址 https://github.com/easytime2000/MathApp这个作业属于哪个课程 https://edu.cnblogs.com/campus/gdgy/Class34Grade23ComputerScience/?page=3这个作业要求在哪里 https://edu.cnblogs.com/c…

用deepseek写的一个求原根的程序

include include include include include using namespace std; // 快速幂算法:计算 (a^b) % mod long long fast_power(long long a, long long b, long long mod) { long long result = 1; a = a % mod; whil…

操作备忘:在AE中让视频中间部分变慢

目标效果:一个15秒的视频, 1-5秒的部分1倍速播放 5-10秒的部分以0.5倍速播放 10-15秒的部分1倍速播放。 操作如下: 1. 对素材或预合成启用时间重映射 2. 在5秒、10秒处打关键帧(开始变慢与结束变慢的位置): 3.…

记一次精简系统Windows11英文版离线安装中文语言包的过程

最近折腾上了超级精简的Win11系统,就是没有那些乱七八糟的服务的,也没有乱七八糟自带软件的系统,然后看了一圈,发现一个叫Nano11的精简系统非常不错,系统的项目以及下载地址:https://github.com/ntdevlabs/nano11…

阿里巴巴数据库开发手册

下载地址https://8ma.co/res/RMFS3J81.zstitle { width: 280px; text-align: center; font-size: 26px } .zsimgweixin { width: 280px } .zsimgali { width: 280px; padding: 0px 0px 50px 0px } .zsleft { float: le…

AI元人文:赋能公共治理、司法与监管的价值权衡新范式

AI元人文:赋能公共治理、司法与监管的价值权衡新范式 在当今复杂多元的社会环境中,公共治理、司法审判与行业监管领域面临着日益复杂的价值权衡挑战。经济发展与环境保护、个人权益与公共利益、创新活力与风险防控等…