为了账号安全,请及时绑定邮箱和手机立即绑定

掌握 Python 项目管理工具 uv 第一课:是时候抛弃 Poetry 了!

你是否对使用 pip, virtualenv, conda, poetrypyenv 等工具来管理你的 Python 环境和依赖感到厌烦?你不是一个人!管理 Python 项目会让人头疼,尤其是当你需要搞定这些不同的包管理器和工具时。

输入 uv 命令全能虚拟环境。可以把它看作是一个一站式解决方案,旨在简化并加速你的Python开发过程。

一个小小背景故事

uv 的灵感来源于 Rye,另一个现代的包管理器,它结合了 pippip-toolspyenvvirtualenvpoetry 的最佳特性。由 Rust 编写,uv 不仅快速,而且高效,无论是管理依赖还是创建虚拟环境,都能变得简单。

uv的目标
简而言之,uv 关乎统一。为什么要在多个工具间切换,而不能有一个统一的体验呢?它旨在消除 Python 开发中的摩擦点,为你提供更一致且更快的项目管理方式。而且它非常快速!这开启了许多新的可能性,比如动态管理

1: 便携代码带内联脚本元信息

我们来聊聊依赖项吧
uv 有一个非常酷的功能,就是在你的 Python 脚本中直接添加依赖项。假设你有一个简单的脚本如下:

    # app.py
    # 下面的代码是用来获取并打印PEP标题的前10条
    import requests  # 导入requests库
    from rich.pretty import pprint  # 导入美化打印功能,并命名为pretty_print
    response = requests.get("https://peps.python.org/api/peps.json")  # 获取PEP数据,响应存储在response
    # 响应中的数据转换为json格式
    data = response.json()
    # 美化打印出PEP标题的前10条,用[:10]表示只显示前10条
    pprint([(k, v["title"]) for k, v in data.items()][:10])

运行此脚本通常意味着设置虚拟环境并手动安装依赖项。使用 uv,您可以将所有依赖项直接嵌入到脚本中,这样使它独立且可分享:

在终端中输入以下命令来添加依赖:

uv add --script app.py 'requests<3' 'rich'

此命令将特定依赖项添加到 app.py 脚本中。'requests<3' 表示 requests 版本需要小于 3,而 'rich' 是另一个依赖项。

自动元数据添加
这会给脚本文件添加元数据:

    # /// 脚本  
    # 依赖库如下:  
    #   "requests<3",  
    #   "rich",  
    # ///  

就这样搞定啦!你可以把这份文件分享给其他人,他们只要运行一下:

    uv run app.py
    # 运行app.py

就这样——完全不需要任何外部设置!都归功于uv的快速和高效。

——

2, 创建和管理虚拟环境

开始使用虚拟环境
默认情况下,uv 需要将包安装在虚拟环境中,以保持系统干净整洁并避免不同项目间的冲突。使用 uv 创建一个虚拟环境超级简单:

    uv venv

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

使用 Python 3.9 创建名为 my_env 的虚拟环境

环境已经准备好了,可以使用了,uv 会自动检测环境,适用于您所有的操作,比如安装包或运行脚本。

何时使用 uv adduv pip install

  • 使用 uv add:当你想要向你的项目的 pyproject.toml 文件添加依赖项时。这在你开发项目并希望跟踪所有依赖项时最为有用,这样可以轻松分享和复现,而不需要依赖项的细节。我们将在接下来的文章中详细讨论,敬请期待!
uv 安装 FastAPI

这会更新你的 pyproject.toml 并将版本锁定在 uv.lock

  • 使用 uv pip install:当你想要快速安装包而无需修改项目文件时,或对于不需要在 pyproject.toml 中跟踪的全局命令。可以将 uv pip 视为立即的一次性安装命令。
uv pip install requests

运行此命令来安装requests库.

选对命令,确保项目管理得当,方便分享和部署。

……

3. 为保证可重复性锁定版本:

你的代码因更新而失效过吗?
比如说,大家可能都有过类似的经历,今天的代码运行正常,明天某个包更新后代码就出问题了。使用 uv,你可以通过锁定依赖包的版本来确保一致性和可重现性:

    [tool.uv]  
    exclude-newer = "2023–10–16T00:00:00Z"  # 排除更新日期为2023年10月16日00:00:00Z之后的文件

这样一来,即使你的依赖项更新了版本,你的项目依然保持稳定。非常适合长期项目,特别是在那些你可承受不起任何意外的情况!

——

4. 管理 Python 版本

不同的项目,不同的Python版本?没有问题!
许多开发者需要在不同Python版本的项目之间切换,这常常让人头疼。uv 让切换Python版本变得轻松简单。

使用uv命令安装Python 3.8, 3.9和3.10版本。

一旦安装完成,切换版本会无缝。

运行以下命令:uv run python 3.10 app.py

如果你想为某个项目锁定特定版本,可以这样做:

更新 Python 到 3.9 版

不再需要使用 pyenv 命令来切换——uv 会帮你搞定所有繁重的事情。

——

5. 和 pip 说再见,摆脱烦恼

它是 pip — 但更快速、更好
就像 pip 一样,但性能大幅提升。安装包超级简单:

运行命令 `pip install flask`

需要添加可选依赖项或直接从 GitHub 仓库安装包吗?没问题:

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

不用再为缓慢的安装浪费时间——uv 能快速高效地完成工作。

— -

6 轻松全局管理CLI工具

blackruff,轻松获取工具
无论你要检查代码还是格式化文件,uv 让你轻松安装 CLI 工具:

  • 全球来说
uv tool install ruff

解释:此命令用于安装名为ruff的工具。

  • 项目本地
执行 uv 加入 ruff
  • 运行那些不需要全局安装的一次性命令
uvx black my_code.py

告别依赖冲突和生态污染——想用就用你所需的工具。

— -

如果你想让你的 Python 开发更上一层楼并希望摆脱多个工具的纠缠,uv 就是最好的选择。凭借其简洁的命令、可重复构建的环境和高效的包管理,uv 使 Python 开发变得轻松又愉快,不再是繁重的工作。

准备好了吗?让我们试试 uv。🚀 从现在开始,体验更轻松地管理你的 Python 项目。

— -

敬请期待第二部分:深入探讨高级功能,包括如何使用 pyproject.toml,处理全局和本地工具安装,以及在管理复杂环境时,uv 如何成为你的得力助手。

祝你编程愉快 Python✨

更多细节和完整文档页面,请参考uv 页面。可以看看。

点击查看更多内容
TA 点赞

若觉得本文不错,就分享一下吧!

评论

作者其他优质文章

正在加载中
  • 推荐
  • 评论
  • 收藏
  • 共同学习,写下你的评论
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦
今天注册有机会得

100积分直接送

付费专栏免费学

大额优惠券免费领

立即参与 放弃机会
意见反馈 帮助中心 APP下载
官方微信

举报

0/150
提交
取消