之前在安装一些工具的时候,偶尔会用到uv, 我没有深究其原理和使用方法,只是照搬命令执行,成功装上工具就行。今天,碰到了一个agent ai项目,又推荐uv, 索性就研究一下吧。
简单看了下,uv的野心还挺大的,即包含pip的功能,又包含venv的功能,而且性能更快。
划重点了, 主要功能:
-
- 整合了包安装(类似 pip),而且和pip命令十分相似
-
- 拟环境管理(类似 venv/conda)
-
- 项目构建
补充一个重点:
powershell 下设置环境变量
bash
$env:PYTHONPATH = "D:\code\kimi-cli\src"
如果你的项目是pyproject.tomp,那么是没有requirement.txt的,如何安装依赖呢?
bash
uv sync
uv sync 是 uv 的核心命令,作用:
- 读取
pyproject.toml和uv.lock(如果存在,优先用锁文件保证依赖版本一致) - 安装所有依赖(生产 + 开发,需配置正确)
- 生成 / 更新
uv.lock锁文件(首次执行会生成)
安装方式
bash
# 通过 curl(Linux/macOS)
curl -LsSf https://astral.sh/uv/install.sh | sh
# 通过 pip(需 Python 3.7+) windows可以使用这种
pip install uv
一、依赖安装和管理
支持从 requirements.txt 或 pyproject.toml 安装依赖,例如:
bash
uv pip install requests # 安装单个包
uv pip install -r requirements.txt # 从文件安装
uv pip freeze > requirements.txt # 导出依赖
二、虚拟环境管理
可快速创建、激活虚拟环境,例如:
bash
uv venv # 创建虚拟环境(默认在 .venv 目录)
source .venv/bin/activate # 激活(Linux/macOS)
三、项目构建
先给一个符合 PEP 621 标准的 pyproject.toml 示例
bash
[build-system]
# 指定构建后端(常用 hatchling、setuptools 等,这里用 hatchling 作为现代后端)
requires = ["hatchling>=1.5"]
build-backend = "hatchling.build"
[project]
# 包的基本信息(核心必填项)
name = "myproject" # 包名(PyPI 上唯一)
version = "0.1.0" # 版本号(遵循语义化版本)
authors = [
{ name = "John Doe", email = "john@example.com" } # 作者信息
]
description = "一个基于 PEP 621 标准的示例 Python 包" # 简短描述
readme = "README.md" # README 文件路径
requires-python = ">=3.8" # 支持的 Python 版本
classifiers = [ # 分类器(用于 PyPI 检索)
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
]
# 依赖项(可选,分为运行时依赖和开发依赖)
dependencies = [
"requests>=2.25", # 运行时必须的依赖
"pydantic>=2.0",
]
[project.optional-dependencies]
# 开发环境依赖(如测试、文档工具等,安装时需指定:pip install myproject[dev])
dev = [
"pytest>=7.0", # 测试工具
"sphinx>=6.0", # 文档生成工具
"black>=23.0", # 代码格式化工具
]
[project.urls]
# 额外链接(如项目主页、源码仓库等)
Homepage = "https://github.com/example/myproject"
Repository = "https://github.com/example/myproject.git"
Issues = "https://github.com/example/myproject/issues"
使用方式:
- 安装构建依赖:
pip install hatchling - 构建包:
python -m build(生成.tar.gz和.whl包) - 发布到 PyPI:
twine upload dist/*