Ubuntu 22.04安装Poetry:Python依赖管理完全指南

介绍

Poetry是Python的一个依赖管理工具,还能够构建和打包用于分发的Python项目。作为一个依赖管理工具,它具备保持一致且独立的虚拟环境的工具。此外,它还提供了与其他形式的依赖管理(如requirements.txt)集成的工具。

在本教程中,您将使用官方安装脚本安装Poetry,设置一个带有虚拟环境的Poetry项目,然后添加并安装您的项目依赖项。

前提条件

  • 一台Ubuntu 22.04服务器,根据我们的Ubuntu 22.04初始服务器设置指南进行设置,拥有一个具有sudo权限的非root用户和已启用的防火墙。
  • 在您的机器上安装了最新版本的Python 3,按照”如何在Ubuntu 22.04服务器上安装Python 3并设置编程环境”教程的第1步进行操作。

第一步 – 安装Poetry

在Poetry网站上提供的官方安装脚本上安装Poetry。该命令将下载安装脚本,然后在您的系统上运行Poetry的安装。尽管这个教程是针对Ubuntu 22.04服务器的,但这个安装脚本可以在Linux、macOS和Windows上通过WSL(Windows子系统)运行,WSL可以通过这个教程安装。请输入以下命令:

  1. curl -sSL https://install.python-poetry.org | python3 -
…
[secondary_label 输出]
Poetry (1.2.1) 现在已安装。太好了!

要开始使用,您需要将Poetry的bin目录(/home/sammy/.local/bin)添加到您的`PATH`
环境变量中。

将 `export PATH="/home/sammy/.local/bin:$PATH"` 添加到您的shell配置文件中。

或者,您可以使用 `/home/sammy/.local/bin/poetry` 显式调用Poetry。
…

安装完成后,Poetry会提示您将其二进制目录添加到PATH中,以便在命令行中使用Poetry。在Ubuntu的Bash中,可以通过使用nano或您喜欢的文本编辑器来打开~/.bashrc文件来完成这个操作。

  1. nano ~/.bashrc

请将以下一行代码添加到文件末尾:

~/.bashrc 可以被解释为用户家目录下的一个隐藏文件,它用于配置Bash shell的环境变量和自定义命令行行为。
. . .
export PATH="/home/sammy/.local/bin:$PATH"

保存并退出文件,在nano中可以通过按下CTRL+X来退出,Y来保存所有更改。

接下来,将这些更改应用到您当前的会话中。

  1. source ~/.bashrc

要检查Poetry命令已经可用,请输入以下命令显示当前的Poetry版本。

  1. poetry --version
Poetry (版本 1.2.1)

现在你已经成功安装了Poetry,并且可以开始设置一个Poetry项目了。

步骤2 —— 建立一个Poetry项目

首先创建一个新的Poetry项目。该项目将带有在安装和管理依赖项时使用的虚拟环境。本教程将使用项目名称sammy_poetry,但您可以自由选择您喜欢的名称。

  1. poetry new sammy_poetry

接下来,进入你的新项目目录:

  1. cd sammy_poetry

您的新Poetry项目已经创建,其中包含了必要的样板文件。要查看您新创建的项目文件,请使用”ls”命令。

  1. ls
README.md dist pyproject.toml sammy_poetry tests

注意:

如果您有一个现有的项目想要使用,您可以使用不同的命令使Poetry将其识别为一个项目。导航到您现有项目的目录,然后输入以下命令:
poetry init
这将在您现有的项目中创建所有必需的文件,并且您可以按照本教程继续进行,就像它是一个新项目一样。

第三步 — 添加依赖

在您开始向项目中添加依赖之前,您首先需要检查并了解Poetry所使用的保存依赖的pyproject.toml文件。在您的Poetry项目目录中会有一个自动生成的pyproject.toml文件,其中包含您依赖的列表。请打开并使用以下内容查看和检查它:

  1. nano pyproject.toml
pyproject.toml 是一个配置文件,用于定义Python项目的元数据和依赖关系。
[tool.poetry]
name = "sammy-poetry"
version = "0.1.0"
description = ""
authors = ["Your Name <you@example.com>"]
readme = "README.md"
packages = [{include = "sammy_poetry"}]

[tool.poetry.dependencies]
python = "^3.10"


[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"

除了列在tool.poetry.dependencies下的依赖项之外,还有在tool.poetry下的元数据。请随意自定义这些元数据,例如姓名、电子邮件和项目描述。build-system块目前包含有关Poetry如何构建您的软件包的规范,并且暂时可以保持不变。

需要注意的一点是,尽管Python 3.10是最新版本,但它可能对资源要求较高,这可能会根据系统配置而成为一个问题。大多数Python库最低只需要3.8版本。如果您希望更改项目所使用的Python版本作为依赖,请在本教程的第4步中了解版本依赖。

您的项目目前只有Python本身这一个依赖项。Poetry可以通过命令行直接为您的项目添加新的依赖项。通过使用”poetry add”命令,Poetry将会在您的tool.poetry.dependencies区块中添加依赖项,并同时安装该依赖项。

在检查完您的 pyproject.toml 文件后,关闭您的编辑器。举个例子,您将把流行的 Python HTTP 库 requests 添加到您的项目依赖中,并使用 add 命令进行安装。这个库允许您使用最少的样板代码发送 HTTP 请求,对于通过 HTTP 进行接口交互的应用程序非常有用,但在演示的目的上任何包都可以。输入以下命令:

  1. poetry add requests
输出 Creating virtualenv sammy-poetry-i9Ouy_MV-py3.10 in /home/sammy/.cache/pypoetry/virtualenvs Using version ^2.28.1 for requests Updating dependencies Resolving dependencies... (0.3s) Writing lock file Package operations: 5 installs, 0 updates, 0 removals • Installing certifi (2022.9.24) • Installing charset-normalizer (2.1.1) • Installing idna (3.4) • Installing urllib3 (1.26.12) • Installing requests (2.28.1)

随着将信息添加到pyproject.toml文件并安装requests,”add”命令还负责初始化虚拟环境。此外,requests本身还有其他依赖项。Poetry在安装requests之前会自动安装所有这些依赖项。

您的pyproject.toml文件将会被更新,内容如下:

pyproject.toml的汉语翻译是:pyproject.toml
. . .
[tool.poetry.dependencies]
python = "^3.10"
requests = "^2.28.1"
. . .

这确保了请求始终被安装。^表示它将是可以安装的最低可接受版本,并且更高的版本也是可以接受的。

第四步 — 移除和排序依赖关系

为了保持您当前安装的依赖项和您在pyproject.toml文件中列出的依赖项之间的一致性,Poetry采用了一个锁定文件。在安装过程中,Poetry直接从这个文件中读取,这意味着直接编辑pyproject.toml文件以更改依赖项可能会导致一些错误或警告,例如:

输出 . . . Warning: poetry.lock is not consistent with pyproject.toml. You may be getting improper dependencies. Run `poetry lock [--no-update]` to fix it. . . .

因此,如果您需要删除一个依赖项或编辑其版本,您应该使用poetry remove命令。虽然手动编辑pyproject.toml文件是可能的,但您必须考虑锁定文件并手动激活虚拟环境。因此,在您想要更改requests的版本的情况下,首先使用以下命令将其删除:

  1. poetry remove requests
输出

更新依赖

更新依赖中
解析依赖... (0.1秒)

写入锁定文件

包操作:0个安装,0个更新,5个移除

  • 移除 certifi (2022.9.24)
  • 移除 charset-normalizer (2.1.1)
  • 移除 idna (3.4)
  • 移除 requests (2.28.1)
  • 移除 urllib3 (1.26.12)

既然请求库已被移除,那么接下来你可以将其作为一个固定依赖添加回来。在依赖关系中,通常你希望将某个库保持在特定版本以符合项目的要求。这通常是因为库会随着时间的推移而变化,通过固定依赖可以有利于保持项目的一致性。这就是所谓的锁定依赖版本。

作为一个示例,当运行add命令时,您可以将请求库固定在不是最新版本的其他版本上。相反,您将把它固定在2.26.0上,这是在PyPI请求历史记录中找到的一个早期有效的发布版本。

  1. poetry add requests@2.26.0
输出
更新依赖中 解析依赖... (0.3秒) 写入锁定文件 包操作:5个安装,0个更新,0个移除 • 安装 certifi (2022.9.24) • 安装 charset-normalizer (2.0.12) • 安装 idna (3.4) • 安装 urllib3 (1.26.12) • 安装 requests (2.26.0)

现在,在您的pyproject.toml文件中,您将找到:

pyproject.toml是可以在Python项目中使用的一种配置文件格式。

. . .
[tool.poetry.dependencies]
python = "^3.10"
requests = "2.26.0"
. . .

这表示请求库将始终安装为特定版本2.26.0。

结论

在这个教程中,您已经安装了Poetry,并创建了一个Poetry项目,可以从头开始或在现有项目中创建。您还为项目添加了依赖项,然后在虚拟环境中安装了这些依赖项。此外,在将其添加为项目的固定依赖项之前,您还删除了一个依赖项。接下来,您可以通过这个教程来探索更多Poetry的功能,学习如何在Ubuntu 22.04上使用Poetry发布Python包到PyPI。

bannerAds