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可以通过这个教程安装。请输入以下命令:
- 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文件来完成这个操作。
- nano ~/.bashrc
请将以下一行代码添加到文件末尾:
. . .
export PATH="/home/sammy/.local/bin:$PATH"
保存并退出文件,在nano中可以通过按下CTRL+X来退出,Y来保存所有更改。
接下来,将这些更改应用到您当前的会话中。
- source ~/.bashrc
要检查Poetry命令已经可用,请输入以下命令显示当前的Poetry版本。
- poetry --version
Poetry (版本 1.2.1)
现在你已经成功安装了Poetry,并且可以开始设置一个Poetry项目了。
步骤2 —— 建立一个Poetry项目
首先创建一个新的Poetry项目。该项目将带有在安装和管理依赖项时使用的虚拟环境。本教程将使用项目名称sammy_poetry,但您可以自由选择您喜欢的名称。
- poetry new sammy_poetry
接下来,进入你的新项目目录:
- cd sammy_poetry
您的新Poetry项目已经创建,其中包含了必要的样板文件。要查看您新创建的项目文件,请使用”ls”命令。
- ls
README.md dist pyproject.toml sammy_poetry tests
注意:
poetry init
第三步 — 添加依赖
在您开始向项目中添加依赖之前,您首先需要检查并了解Poetry所使用的保存依赖的pyproject.toml文件。在您的Poetry项目目录中会有一个自动生成的pyproject.toml文件,其中包含您依赖的列表。请打开并使用以下内容查看和检查它:
- nano pyproject.toml
[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 进行接口交互的应用程序非常有用,但在演示的目的上任何包都可以。输入以下命令:
- 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文件将会被更新,内容如下:
. . .
[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的版本的情况下,首先使用以下命令将其删除:
- 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请求历史记录中找到的一个早期有效的发布版本。
- 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。