惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Jina AI
Jina AI
T
Threat Research - Cisco Blogs
量子位
Last Week in AI
Last Week in AI
aimingoo的专栏
aimingoo的专栏
Martin Fowler
Martin Fowler
F
Fortinet All Blogs
爱范儿
爱范儿
D
Docker
人人都是产品经理
人人都是产品经理
S
SegmentFault 最新的问题
Microsoft Azure Blog
Microsoft Azure Blog
B
Blog RSS Feed
A
About on SuperTechFans
P
Proofpoint News Feed
博客园 - 司徒正美
Recent Announcements
Recent Announcements
I
InfoQ
Hugging Face - Blog
Hugging Face - Blog
Microsoft Security Blog
Microsoft Security Blog
有赞技术团队
有赞技术团队
Webroot Blog
Webroot Blog
云风的 BLOG
云风的 BLOG
Vercel News
Vercel News
SecWiki News
SecWiki News
Attack and Defense Labs
Attack and Defense Labs
Hacker News: Ask HN
Hacker News: Ask HN
AI
AI
博客园_首页
腾讯CDC
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recorded Future
Recorded Future
T
Tailwind CSS Blog
MyScale Blog
MyScale Blog
T
Tenable Blog
宝玉的分享
宝玉的分享
Google Online Security Blog
Google Online Security Blog
Security Archives - TechRepublic
Security Archives - TechRepublic
S
Secure Thoughts
C
Check Point Blog
S
Security Affairs
L
LINUX DO - 最新话题
大猫的无限游戏
大猫的无限游戏
Scott Helme
Scott Helme
cs.CV updates on arXiv.org
cs.CV updates on arXiv.org
Hacker News - Newest:
Hacker News - Newest: "LLM"
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
月光博客
月光博客
Y
Y Combinator Blog

博客园 - 三叶草╮

DeepAgents 长期记忆相关组件详解 DeepAgents 长期记忆 笔记 Python 机器学习03 - 常见分类算法 Python 机器学习02 - 常见分类算法 Python机器学习01 - Sklearn Python高级编程笔记 (线程/进程/协程) Python高级编程笔记 Python 基础笔记 Pandas 常用操作 (缺失值处理/排序/字符串处理/Index/Merge/合并) Python Pandas Python playwright 笔记 pipreqs:快速准确生成当前项目的requirements.txt,还有和freeze的对比 WPF 4款 UI 库 C# Selenium [转]在WPF中自定义控件 UserControl [转]WPF的依赖属性是怎么节约内存的 [转]WPF中的导航框架 [转]C#对Excel报表进行操作(读写和基本操作) C# 模拟http请求网页数据 [网页爬虫]
Python uv 包管理
三叶草╮ · 2025-11-04 · via 博客园 - 三叶草╮

长期使用 Python 时,经常会面临多版本管理、依赖冲突以及库管理等问题,此时选择合适的包管理工具尤为重要。常见的工具包括 pipenvvirtualenvCondaPoetryRyepipx、pip-sync 以及 uv。面对众多选择,应根据项目需求、环境隔离、依赖复杂度及团队协作等因素,综合评估和选择最适合自身场景的工具。

uv的github及官方文档链接:

为什么使用uv?

运行速度快

官网原文"An extremely fast Python package and project manager, written in Rust.",号称”比 pip 快 10-100 倍“,配图:

功能全面,且使用方便

替代pip、virtualenv、poetry、pyenv等工具,支持虚拟环境管理、依赖锁定、脚本运行、Python版本控制等,兼容传统pip命令,语法一致但性能优化。

依赖管理与环境可复现

锁文件机制:生成uv.lock文件精确记录依赖版本,确保开发、测试、生产环境一致性

智能冲突解决:基于PubGrub算法自动选择兼容版本组合,避免“依赖地狱”

安装UV

安装

已有python环境,直接通过pip安装:

或者通过命令来运行:

# windows环境,在powershell窗口执行:
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

# Mac OS 或 Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

如何高效使用

项目管理流程

1)创建项目或项目环境

# 创建项目环境同时自动创建文件夹
uv init project_name   # project_name为自己的项目文件夹名称

# 如果是已有的项目文件夹
cd project_name   # 进入项目文件夹
uv init

执行上述命令后,会自动在文件夹下生成如下文件或文件夹,其中如果已有main.py,不会覆盖,自动创建的main.py只是个示例文件:

├── .python-version
├── README.md
├── main.py
└── pyproject.toml
└── .gitignore
.git

其中两个重点文件:

pyproject.toml是uv用于指定依赖项以及项目信息的文件,可以手动编辑此文件,使用uv add以及uv remove工具时,会自动更新此文件。

.python-version是用于管理python版本的文件(若未指定则自动检测)

2)创建虚拟环境并生成lock文件

# 如果是新项目,运行如下命令,会创建.venv环境以及uv.lock文件
uv sync

# 如果希望从之前的requirements文件导入,会自动安装对应的包,并创建.venv环境以及uv.lock文件
uv add -r requirements.txt

其中:uv.lcok文件是一个toml格式文件,用于记录每个依赖及其子依赖的哈希值和下载源,确保环境一致性,不应该手动编辑,依赖于pyproject.toml文件来生成

3)添加、删除、更新、查看包

# 强烈不建议使用uv pip install命令,不会自动更新pyproject.toml文件
# 应该使用如下命令
uv add package  # package为需安装的包名称
uv remove package 
uv tree  # 树形结构显示已安装的包以及包依赖
uv pip list  # 会显示由uv管理和不由uv管理的所有安装包比如使用uv pip install安装的包
uv lock --upgrade-package loguru  # 更新包

# 更多命令
uv add --group dev pandas  # 安装到开发环境
uv add --group production requests  # 安装到生产环境
uv add "httpx>=0.20"  # 版本条件

4)运行程序

# uv自动按照当前目录下的.venv识别和调用虚拟环境来运行
uv run your_script.py

使用技巧

配置镜像源

# 在pyproject.toml中,添加如下内容,url为自行添加的镜像源地址:
[[tool.uv.index]]
url = "https://mirrors.aliyun.com/pypi/simple"
default = true

# 在终端中临时使用指定镜像源,包的名字在最后
uv add --default-index https://mirrors.aliyun.com/pypi/simple playwright

配置python版本

# 创建或初始化项目时
uv venv .venv --python 3.10   # 指定python版本

# 在项目.venv已创建后,希望修改python版本
手动更改项目python版本。在pyproject.toml以及.python-version中更改版本之后,执行uv sync就会自动安装新版本python

uv python list # 列出所有可用的python版本,包括本地已安装的版本
uv python install 3.13.2 # 使用uv安装指定版本的python

重点认识lock和sync

uv lock
# 精确依赖记录:根据 pyproject.toml 解析依赖关系,生成或更新 uv.lock 文件,
# 记录所有依赖及其子依赖的 精确版本、哈希值、下载源,确保开发、测试、生产环境的依赖完全一致,
# 避免因版本差异导致的兼容性问题
# 依赖树解析:基于 PubGrub 算法智能选择兼容版本,解决依赖冲突
# 哈希验证:依赖包的哈希值记录在 uv.lock 中,安装时校验完整性,防止篡改或损坏

uv lock --check  # 检查更新
uv lock --update  # 强制重新解析依赖

uv sync 
# 根据锁定文件"uv.lock"安装依赖,使当前环境依赖与锁定文件完全一致,不会自动更新pyproject.toml
# 根据 uv.lock 或 pyproject.toml 安装或更新依赖,使虚拟环境与声明文件完全一致
# 卸载环境中未在锁文件中声明的多余依赖,保持环境纯净
# 利用全局缓存(默认路径 ~/.cache/uv)复用已下载的包,减少网络传输和重复构建

文章原文转自:https://zhuanlan.zhihu.com/p/1905925258747289612