”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 使用 uv 掌握 Python 项目管理 PartIt&#s Time to Ditch Poetry

使用 uv 掌握 Python 项目管理 PartIt&#s Time to Ditch Poetry

发布于2024-11-04
浏览:753

Mastering Python Project Management with uv PartIt

您是否厌倦了为了控制 Python 环境和依赖项而使用 pip、virtualenv、conda、poetry 和 pyenv 等多个工具?你并不孤单!管理 Python 项目可能会让人感到头疼,尤其是在需要处理各种不同的包管理器和工具的情况下。

输入 uv通用 Virtualenv。将其视为一站式包管理器,旨在简化和加速您的 Python 开发过程。


一些背景故事

uv 从另一位现代打包管理器 Rye 中汲取灵感,统一了 pip、pip-tools、pyenv、virtualenv 和 Poetry 的最佳功能。 uv 使用 Rust 构建,不仅速度快,而且效率高,简化了从管理依赖项到创建虚拟环境的一切。

紫外线的目的

简而言之,uv 就是整合。当您可以获得一种统一的体验时,为什么要在多种工具之间切换?它旨在消除 Python 开发中的摩擦,为您提供更一致、更快速的项目管理方式。而且速度还很快!这为动态管理打开了新的大门


1. 带有内联脚本元数据的可移植代码

让我们谈谈依赖关系

uv 最令人兴奋的功能之一是能够直接在 Python 脚本中添加依赖项。想象一下你有一个像这样的简单脚本:

# app.py
import requests
from rich.pretty import pprint

response = requests.get("https://peps.python.org/api/peps.json")
data = response.json()
pprint([(k, v["title"]) for k, v in data.items()][:10])

运行此脚本通常意味着设置虚拟环境并手动安装依赖项。使用 uv,您可以将所有依赖项直接嵌入到脚本中,使其成为自包含可共享

$ uv add --script app.py 'requests



自动元数据生成

这会将元数据添加到脚本文件中:

# /// script
# dependencies = [
#   "requests



就是这样!您可以与其他人共享此文件,他们只需运行:

$ uv run app.py

瞧——无需外部设置!这一切都归功于 uv 的速度和效率。


2. 创建和管理虚拟环境

虚拟环境入门

默认情况下,uv 要求在虚拟环境中安装软件包,以保持系统干净并避免不同项目之间的冲突。用uv创建虚拟环境很简单:

$ uv venv

这将创建一个包含隔离环境的 .venv 目录。如果你想指定自定义目录或Python版本,你可以这样做:

$ uv venv my_env --python 3.9

环境已准备好使用,uv 将自动检测您的所有命令,例如安装包或运行脚本。

何时使用 uv add 与 uv pip install

  • 使用 uv add:当你想向项目的 pyproject.toml 文件添加依赖项时。当您正在开发项目并希望跟踪所有依赖项以使项目易于共享和复制时,这是最好的选择。我们将在下一篇文章中对此进行介绍,敬请期待!

    $ uv add fastapi
    

    这将更新您的 pyproject.toml 并将版本锁定在 uv.lock 中。

  • 使用 uv pip install:当您想要安装包以快速使用而不修改项目文件时,或者对于不需要在 pyproject.toml 中跟踪它们的全局工具时。将 uv pip 视为一种直接的一次性安装。

    $ uv pip install requests
    

选择正确的命令可确保您的项目得到正确管理并易于共享或部署。


3. 锁定版本以实现可重复性

您的代码是否曾因更新而被破坏过?

我们都经历过这样的情况——您的代码今天可以运行,但明天就会因为包更新而崩溃。使用 uv,您可以通过锁定软件包版本来防止这种情况,以确保一致性和可重复性:

[tool.uv]
exclude-newer = "2023-10-16T00:00:00Z"

这样,即使出现新版本的依赖项,您的项目也保持稳定。非常适合无法承受意外的长期项目!


4. 管理Python版本

不同的项目,不同的Python版本?没问题!

许多开发人员必须处理需要不同 Python 版本的多个项目。 uv 让切换版本变得如此简单:

$ uv python install 3.8 3.9 3.10

安装版本后,它们之间的切换是无缝的:

$ uv run --python 3.10 app.py

如果您想锁定项目的特定版本:

$ uv python pin 3.9

不再需要杂耍 pyenv 命令——uv 会为您处理所有繁重的工作。


5. 告别 pip 麻烦

虽然是点,但更快更好

uv 提供类似 pip 的体验,但具有涡轮增压的性能。安装软件包很简单:

$ uv pip install flask

需要添加可选依赖项或直接从 GitHub 存储库安装?不费吹灰之力:

$ uv pip install 'torch>=1.10.0' "git https://github.com/astral-sh/ruff"

不再需要等待缓慢的安装 - uv 可以快速有效地完成工作。


6. 轻松全局管理 CLI 工具

从黑色到皱褶,轻松获取您的工具

无论您是要检查代码还是格式化文件,uv 都可以让安装 CLI 工具变得简单:

  • 全球

    $ uv tool install ruff
    
  • 项目内本地

    $ uv add ruff
    
  • 运行临时命令而不全局安装:

    $ uvx black my_code.py
    

告别包冲突和环境污染——随时随地运行您的工具。


如果您希望增强您的 Python 开发能力并希望停止使用多种工具,uv 就是您的答案。凭借其简化的命令、可重现的环境和高效的包管理,uv 使 Python 开发成为一种乐趣而不是一件苦差事。

准备好尝试一下紫外线了吗? ?从今天开始,体验管理 Python 项目的更好方法。


请继续关注第 2 部分,我们将深入探讨高级功能,例如利用 pyproject.toml、处理全局与本地工具安装,以及 uv 如何成为管理复杂环境时最好的朋友。

编码愉快! ?✨

有关更多详细信息和完整文档,请查看 uv 文档。

版本声明 本文转载于:https://dev.to/thomas_bury_b1a50c1156cbf/mastering-python-project-management-with-uv-part1-its-time-to-ditch-poetry-3bi0?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    如何解决AppEngine中“无法猜测文件类型,使用application/octet-stream...”错误?
    appEngine静态文件mime type override ,静态文件处理程序有时可以覆盖正确的mime类型,在错误消息中导致错误消息:“无法猜测mimeType for for file for file for [File]。 application/application/octet...
    编程 发布于2025-04-26
  • 表单刷新后如何防止重复提交?
    表单刷新后如何防止重复提交?
    在Web开发中预防重复提交 在表格提交后刷新页面时,遇到重复提交的问题是常见的。要解决这个问题,请考虑以下方法: 想象一下具有这样的代码段,看起来像这样的代码段:)){ //数据库操作... 回声“操作完成”; 死(); } ?> ...
    编程 发布于2025-04-26
  • 如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    如何为PostgreSQL中的每个唯一标识符有效地检索最后一行?
    postgresql:为每个唯一标识符提取最后一行,在Postgresql中,您可能需要遇到与在数据库中的每个不同标识相关的信息中提取信息的情况。考虑以下数据:[ 1 2014-02-01 kjkj 在数据集中的每个唯一ID中检索最后一行的信息,您可以在操作员上使用Postgres的有效效率: ...
    编程 发布于2025-04-26
  • 解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    解决MySQL错误1153:数据包超出'max_allowed_packet'限制
    mysql错误1153:故障排除比“ max_allowed_pa​​cket” bytes 更大的数据包,用于面对阴谋mysql错误1153,同时导入数据capase doft a Database dust?让我们深入研究罪魁祸首并探索解决方案以纠正此问题。理解错误此错误表明在导入过程中接...
    编程 发布于2025-04-26
  • 将图片浮动到底部右侧并环绕文字的技巧
    将图片浮动到底部右侧并环绕文字的技巧
    在Web设计中围绕在Web设计中,有时可以将图像浮动到页面右下角,从而使文本围绕它缠绕。这可以在有效地展示图像的同时创建一个吸引人的视觉效果。 css位置在右下角,使用css float and clear properties: img { 浮点:对; ...
    编程 发布于2025-04-26
  • 找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    找到最大计数时,如何解决mySQL中的“组函数\”错误的“无效使用”?
    如何在mySQL中使用mySql 检索最大计数,您可能会遇到一个问题,您可能会在尝试使用以下命令:理解错误正确找到由名称列分组的值的最大计数,请使用以下修改后的查询: 计数(*)为c 来自EMP1 按名称组 c desc订购 限制1 查询说明 select语句提取名称列和每个名称...
    编程 发布于2025-04-26
  • Python中嵌套函数与闭包的区别是什么
    Python中嵌套函数与闭包的区别是什么
    嵌套函数与python 在python中的嵌套函数不被考虑闭合,因为它们不符合以下要求:不访问局部范围scliables to incling scliables在封装范围外执行范围的局部范围。 make_printer(msg): DEF打印机(): 打印(味精) ...
    编程 发布于2025-04-26
  • 在C#中如何高效重复字符串字符用于缩进?
    在C#中如何高效重复字符串字符用于缩进?
    在基于项目的深度下固定字符串时,重复一个字符串以进行凹痕,很方便有效地有一种有效的方法来返回字符串重复指定的次数的字符串。使用指定的次数。 constructor 这将返回字符串“ -----”。 字符串凹痕= new String(' - ',depth); console.Wr...
    编程 发布于2025-04-26
  • 在PHP中如何高效检测空数组?
    在PHP中如何高效检测空数组?
    在PHP 中检查一个空数组可以通过各种方法在PHP中确定一个空数组。如果需要验证任何数组元素的存在,则PHP的松散键入允许对数组本身进行直接评估:一种更严格的方法涉及使用count()函数: if(count(count($ playerList)=== 0){ //列表为空。 } 对...
    编程 发布于2025-04-26
  • 在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    在Ubuntu/linux上安装mysql-python时,如何修复\“ mysql_config \”错误?
    mysql-python安装错误:“ mysql_config找不到”“ 由于缺少MySQL开发库而出现此错误。解决此问题,建议在Ubuntu上使用该分发的存储库。使用以下命令安装Python-MysqldB: sudo apt-get安装python-mysqldb sudo pip in...
    编程 发布于2025-04-26
  • 如何有效地转换PHP中的时区?
    如何有效地转换PHP中的时区?
    在PHP 利用dateTime对象和functions DateTime对象及其相应的功能别名为时区转换提供方便的方法。例如: //定义用户的时区 date_default_timezone_set('欧洲/伦敦'); //创建DateTime对象 $ dateTime = ne...
    编程 发布于2025-04-26
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-04-26
  • 如何从PHP中的数组中提取随机元素?
    如何从PHP中的数组中提取随机元素?
    从阵列中的随机选择,可以轻松从数组中获取随机项目。考虑以下数组:; 从此数组中检索一个随机项目,利用array_rand( array_rand()函数从数组返回一个随机键。通过将$项目数组索引使用此键,我们可以从数组中访问一个随机元素。这种方法为选择随机项目提供了一种直接且可靠的方法。
    编程 发布于2025-04-26
  • 如何在鼠标单击时编程选择DIV中的所有文本?
    如何在鼠标单击时编程选择DIV中的所有文本?
    在鼠标上选择div文本单击带有文本内容,用户如何使用单个鼠标单击单击div中的整个文本?这允许用户轻松拖放所选的文本或直接复制它。 在单个鼠标上单击的div元素中选择文本,您可以使用以下Javascript函数: function selecttext(canduterid){ if(do...
    编程 发布于2025-04-26
  • C++20 Consteval函数中模板参数能否依赖于函数参数?
    C++20 Consteval函数中模板参数能否依赖于函数参数?
    [ consteval函数和模板参数依赖于函数参数在C 17中,模板参数不能依赖一个函数参数,因为编译器仍然需要对非contexexpr futcoriations contim at contexpr function进行评估。 compile time。 C 20引入恒定函数,必须在编译时进行...
    编程 发布于2025-04-26

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3