跳到内容

处理项目

uv 支持管理 Python 项目,这些项目在 pyproject.toml 文件中定义其依赖项。

创建新项目

你可以使用 uv init 命令创建一个新的 Python 项目

$ uv init hello-world
$ cd hello-world

或者,你也可以在当前工作目录中初始化一个项目

$ mkdir hello-world
$ cd hello-world
$ uv init

uv 将创建以下文件

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

main.py 文件包含一个简单的“Hello world”程序。尝试使用 uv run 来运行它

$ uv run main.py
Hello from hello-world!

项目结构

一个项目由几个协同工作的核心部分组成,这些部分使 uv 能够管理你的项目。除了 uv init 创建的文件外,当你首次运行项目命令(例如 uv runuv syncuv lock)时,uv 会在项目根目录下创建一个虚拟环境和一个 uv.lock 文件。

完整的文件列表如下

.
├── .venv
│   ├── bin
│   ├── lib
│   └── pyvenv.cfg
├── .python-version
├── README.md
├── main.py
├── pyproject.toml
└── uv.lock

pyproject.toml

pyproject.toml 包含关于你项目的元数据

pyproject.toml
[project]
name = "hello-world"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
dependencies = []

你将使用此文件来指定依赖项以及项目的详细信息(例如描述或许可证)。你可以手动编辑此文件,或使用 uv adduv remove 等命令从终端管理你的项目。

提示

有关 pyproject.toml 格式的入门更多详细信息,请参阅官方的 pyproject.toml 指南

你还可以使用此文件在 [tool.uv] 部分中指定 uv 的 配置选项

.python-version

.python-version 文件包含项目的默认 Python 版本。该文件告诉 uv 在创建项目虚拟环境时使用哪个 Python 版本。

.venv

.venv 文件夹包含项目的虚拟环境,这是一个与系统其余部分隔离的 Python 环境。这是 uv 安装项目依赖项的地方。

有关更多详细信息,请参阅 项目环境 文档。

uv.lock

uv.lock 是一个跨平台的锁定文件,包含有关项目依赖项的精确信息。与用于指定项目宽泛需求的 pyproject.toml 不同,锁定文件包含安装在项目环境中的精确解析版本。该文件应纳入版本控制,以便在不同机器上实现一致且可重现的安装。

uv.lock 是一个人类可读的 TOML 文件,但由 uv 管理,不应手动编辑。

有关更多详细信息,请参阅 锁定文件 文档。

管理依赖

你可以使用 uv add 命令将依赖项添加到 pyproject.toml 中。这也将更新锁定文件和项目环境

$ uv add requests

你还可以指定版本限制或备用源

$ # Specify a version constraint
$ uv add 'requests==2.31.0'

$ # Add a git dependency
$ uv add git+https://github.com/psf/requests

如果你是从 requirements.txt 文件迁移而来,可以使用带 -r 标志的 uv add 命令来添加该文件中的所有依赖项

$ # Add all dependencies from `requirements.txt`.
$ uv add -r requirements.txt -c constraints.txt

要移除包,可以使用 uv remove

$ uv remove requests

要升级包,请运行带 --upgrade-package 标志的 uv lock

$ uv lock --upgrade-package requests

--upgrade-package 标志将尝试将指定的包更新到最新的兼容版本,同时保持锁定文件的其余部分不变。

有关更多详细信息,请参阅 管理依赖项 的相关文档。

查看版本

uv version 命令可用于读取包的版本。

要获取包的版本,请运行 uv version

$ uv version
hello-world 0.7.0

要获取不带包名的版本,请使用 --short 选项

$ uv version --short
0.7.0

要以 JSON 格式获取版本信息,请使用 --output-format json 选项

$ uv version --output-format json
{
    "package_name": "hello-world",
    "version": "0.7.0",
    "commit_info": null
}

有关更新包版本的详细信息,请参阅 发布指南

运行命令

uv run 可用于在项目环境中运行任意脚本或命令。

在每次调用 uv run 之前,uv 都会验证锁定文件是否与 pyproject.toml 同步,以及环境是否与锁定文件同步,从而无需人工干预即可保持项目同步。uv run 确保你的命令是在所有必需依赖项都处于锁定版本的情况下运行的。

注意

默认情况下,uv run 不会从环境中移除外部包(不在锁定文件中的包)。有关详细信息,请参阅 处理外部包

例如,使用 flask

$ uv add flask
$ uv run -- flask run -p 3000

或者,运行脚本

example.py
# Require a project dependency
import flask

print("hello world")
$ uv run example.py

或者,你可以使用 uv sync 手动更新环境,然后在执行命令之前激活它

$ uv sync
$ source .venv/bin/activate
$ flask run -p 3000
$ python example.py
PS> uv sync
PS> .venv\Scripts\activate
PS> flask run -p 3000
PS> python example.py

注意

虚拟环境必须处于激活状态才能在不使用 uv run 的情况下在项目中运行脚本和命令。虚拟环境的激活方式因 Shell 和平台而异。

有关更多详细信息,请参阅项目中 运行命令和脚本 的文档。

构建分发包

uv build 可用于为你的项目构建源分发包 (sdist) 和二进制分发包 (wheel)。

默认情况下,uv build 会在当前目录中构建项目,并将构建出的制品放置在 dist/ 子目录中

$ uv build
$ ls dist/
hello-world-0.1.0-py3-none-any.whl
hello-world-0.1.0.tar.gz

有关更多详细信息,请参阅 构建项目 的文档。

下一步

要了解有关使用 uv 进行项目开发的更多信息,请参阅 项目概念 页面和 命令行参考

或者,继续阅读以了解如何 将 uv 锁定文件导出为不同格式