网站首页 > 技术文章 正文
uv 工具是一个高速的 Python 包和项目管理器。它用 Rust 编写,旨在简化你的工作流程。它提供了快速的依赖项安装,并将多种功能集成到一个工具中。
使用 uv,你可以安装和管理多个 Python 版本,创建虚拟环境,高效处理项目依赖项,重现工作环境,甚至构建和发布项目。这些功能使得 uv 成为管理 Python 项目的“一站式”工具。
在本教程结束时,你将明白:
- uv 是一个 Python 包和项目管理器,它将多种功能集成到一个工具中,为管理 Python 项目提供了一个全面的解决方案。
- uv 用于快速依赖项安装,虚拟环境管理,Python 版本管理和项目初始化,提升生产力和效率。
- uv 可以构建和发布 Python 包到包仓库,例如 PyPI,支持从开发到分发的简化流程。
- uv 自动处理虚拟环境,根据需要创建和管理它们,以确保项目依赖项的清洁和隔离。
要深入学习如何使用 uv 高效管理 Python 项目,你应该具备使用 Python 虚拟环境的基本知识,了解如何为项目设置 pyproject.toml 文件,以及如何构建可分发的项目包。
一、了解 Python 中的 uv
在本教程中,你将探索另一个用 Rust 为 Python 制作的酷炫工具。你将了解 uv,这是一个极其快速的 Python 包和项目管理器。
此外,uv 将像 pip、pip-tools、pipx、poetry、pyenv、twine、virtualenv 等工具提供的大多数功能集成到一个工具中。因此,uv 是一个“一站式”解决方案。
以下是 uv 用于管理 Python 项目的关键功能列表:
- 快速依赖项安装:安装依赖项非常快,对于大型依赖树尤其有用。
- 虚拟环境管理:自动创建和管理 虚拟环境(参考第一篇文章)。
- Python 版本管理:允许安装和管理多个 Python 版本(参考第一篇文章)。
- 项目初始化:搭建完整的 Python 项目,包括根目录、Git 仓库、虚拟环境、pyproject.toml、README 等。
- 依赖项管理:安装、更新、移除和锁定直接和 传递依赖项,允许环境可重现。
- 包构建和发布管理:允许你将包构建并发布到像 Python Package Index (PyPI) 这样的包仓库。
- 开发工具支持:安装并运行开发工具,例如 pytest、Black 和 Ruff。
除了这些功能外,uv 是一个独立的二进制文件,允许轻松安装和快速升级。你不需要在系统上安装 Python 就可以安装 uv。
因此,在对 uv 及其主要功能进行了这个简短的总结之后,你就可以在系统上安装这个工具了。这将在接下来的部分中完成。此外,你还将学习如何更新你的 uv 安装。
二、升级到最新版本的 uv
关于 uv的安装,可以参考第一篇文章。
正如你所知,时间过得很快。uv 项目目前正处于积极开发中,这意味着新版本会定期发布。
如果你使用的是 独立安装程序 安装的 uv,并且希望跟上最新版本,那么你可以运行以下命令:
uv self update
在macOS 中执行:
sudo uv self update
Password:
info: Checking for updates...
success: Upgraded uv from v0.6.16 to v0.7.4! https://github.com/astral-sh/uv/releases/tag/0.7.4
检查版本:
uv --version
uv 0.7.4 (6fbcd09b5 2025-05-15)
uv self update 命令会检查是否有新版本可用。如果存在,该命令会为你下载新包并安装。
如果你使用的是 pipx 安装的 uv,并且希望升级它,那么你可以运行以下命令:
pipx upgrade uv
此命令允许你将 uv 安装升级到最新版本,前提是你使用的是 pipx。
三、使用 uv 处理 Python 项目
现在来到了有趣的部分 —— 创建和管理 Python 项目的部分。在本节中,你将探索 uv 的功能和命令,这些功能和命令使你可以快速高效地完成这些操作。
创建 Python 项目
要使用 uv 创建并初始化 Python 项目,请导航到你希望存储项目的目录。到达后,你可以运行以下命令来创建并初始化项目:
uv init rpcats
请注意,项目名称由你决定。在本例中,你将使用 rpcats 来表示这是一个用于检索和显示猫信息的 Real Python 项目。
上述命令会在 rpcats/ 文件夹下创建以下目录结构:
这太棒了!首先,你有一个 .git/ 目录,它是项目的 Git 仓库。 .gitignore 文件允许你定义你希望在版本控制工作流中跳过的文件和文件夹。默认情况下,uv 会自动用大多数 Python 项目适用的合理条目填充此文件,确保不需要的文件不会被纳入版本控制。
.python-version 文件包含当前项目的默认 Python 版本。此文件告诉 uv 在为项目创建专用虚拟环境时应使用哪个 Python 版本。接下来,你有一个空的 README.md 文件,你可以用它为你的项目提供基本文档。
main.py 文件是一个占位符 Python 文件,最初包含以下代码:
def main():
print("Hello from rpcats!")
if __name__ == "__main__":
main()
在这个例子中,你有一个 main() 函数,它会在屏幕上打印一条消息。在文件底部,你还会看到熟悉的 if __name__ == "__main__" 用法,这是这类可执行文件中的常见做法。
最后,你有一个带有以下初始内容的 pyproject.toml 文件:
[project]
name = "rpcats"
version = "0.1.0"
description = "Add your description here"
readme = "README.md"
requires-python = ">=3.13"
dependencies = []
此文件在 [project] 下包含基本的配置键值对。你可以根据需要更新任何键的值。例如,你可以将 description 改为类似以下内容:
[project]
name = "rpcats"
version = "0.1.0"
description = "显示指定品种的猫的信息。"
readme = "README.md"
requires-python = ">=3.13"
dependencies = []
现在,你的项目有了一个明确的描述。你还可以更改项目的版本、所需的 Python 版本等。
注意:如果你想使用 uv 开始管理一个现有的项目,那么请导航到项目的目录并运行以下命令:
uv init
此命令将为你创建 uv 项目的结构。如果你已经有一个 main.py 文件,它不会覆盖该文件,但如果缺少该文件,它会为你创建一个。它既不会修改你的 Git 仓库,也不会修改你的 README.md 文件。
然而,如果你已经有一个 pyproject.toml 文件,那么这个命令将无法工作。如果是这种情况,你可以将该文件移动到其他位置,然后运行 uv init 命令。最后,你可以将旧的 pyproject.toml 文件中的任何相关配置更新到新文件中。
就这样!你已经使用 uv 创建了你的第一个项目。现在你可以运行项目的入口脚本,即默认的 main.py,来检查一切是否正常运行。
运行项目的入口脚本
创建项目后,你可以使用 uv 运行入口脚本,即默认的 main.py 文件。要运行脚本,请执行以下命令:
uv run main.py
输出:Hello from rpcats!
首次运行此命令时,uv 为项目创建了一个专用的 Python 虚拟环境。最终输出行会显示调用 main.py 中定义的 main() 函数的结果。
如果你再次检查项目的根目录内容,你会看到一个名为 .venv 的文件夹,其中包含项目的专用虚拟环境。
你还会看到一个名为 uv.lock 的新文件,这是一个跨平台的 锁定文件,其中包含有关项目依赖项的信息。此文件确保其他开发者可以快速且精确地重现你的工作环境,从而增强团队协作和代码贡献。
与 pyproject.toml(通常指定项目的直接依赖项)不同,uv.lock 文件包含在项目环境中安装的任何依赖项的确切版本。
uv.lock 文件使用 TOML 格式。你应该将此文件添加到版本控制中,但不应手动编辑它。相反,你可以让 uv 来管理它。你稍后会了解更多关于这个文件的内容。
猜你喜欢
- 2025-05-22 副业兼职不同适合上班族的25个副业(上),每个做好都月入过万
- 2025-05-22 突破爬虫瓶颈:Python爬虫核心能力提升与案例实操
- 2025-05-22 超实用!这是我见过最全面的Python入门教程,新手不要错过免费送
- 2025-05-22 Python生成器入门:用“按需生产”思维处理海量数据
- 2025-05-22 用Python进行机器学习(16)-内容总结
- 2025-05-22 Python办公自动化系列篇之十:总结
- 2025-05-22 小学生Python编程入门-1.什么是编程?
- 2025-05-22 用Python开发日常小软件,让生活与工作更高效!附实例代码
- 2025-05-22 丢掉Excel,手把手教你用Python做可视化,还能调节动画丝滑度
- 2025-05-22 Python开发工程师必会的3个设计模式(工厂、单例、适配器)
- 05-25Python 3.14 t-string 要来了,它与 f-string 有何不同?
- 05-25Python基础元素语法总结
- 05-25Python中的变量是什么东西?
- 05-25新手常见的python报错及解决方案
- 05-2511-Python变量
- 05-2510个每个人都是需要知道Python问题
- 05-25Python编程:轻松掌握函数定义、类型及其参数传递方式
- 05-25Python基础语法
- 257℃Python短文,Python中的嵌套条件语句(六)
- 257℃python笔记:for循环嵌套。end=""的作用,图形打印
- 256℃PythonNet:实现Python与.Net代码相互调用!
- 251℃Python操作Sqlserver数据库(多库同时异步执行:增删改查)
- 251℃Python实现字符串小写转大写并写入文件
- 106℃原来2025是完美的平方年,一起探索六种平方的算吧
- 91℃Python 和 JavaScript 终于联姻了!PythonMonkey 要火?
- 81℃Ollama v0.4.5-v0.4.7 更新集合:Ollama Python 库改进、新模型支持
- 最近发表
- 标签列表
-
- python中类 (31)
- python 迭代 (34)
- python 小写 (35)
- python怎么输出 (33)
- python 日志 (35)
- python语音 (31)
- python 工程师 (34)
- python3 安装 (31)
- python音乐 (31)
- 安卓 python (32)
- python 小游戏 (32)
- python 安卓 (31)
- python聚类 (34)
- python向量 (31)
- python大全 (31)
- python次方 (33)
- python桌面 (32)
- python总结 (34)
- python浏览器 (32)
- python 请求 (32)
- python 前端 (32)
- python验证码 (33)
- python 题目 (32)
- python 文件写 (33)
- python中的用法 (32)