使用 Python Poetry 进行依赖管理

当您的 Python 项目依赖于外部包时,您需要确保使用每个包的正确版本。更新后,软件包可能无法像更新前那样工作。Python Poetry 之类的依赖项管理器可帮助您指定、安装和解析项目中的外部包。通过这种方式,您可以确保始终在每台机器上使用正确的依赖版本。

使用 Poetry 将帮助您启动新项目、维护现有项目并掌握依赖项管理。您将准备好使用 pyproject.toml 文件,这将是在 Python 项目中定义构建需求的标准。

要完成本教程并充分利用它,您应该对虚拟环境、模块和包以及 pip.

虽然本教程侧重于依赖项管理,但 Poetry 还可以帮助您构建和打包项目。如果您想分享您的工作,那么您甚至可以将您的 Poetry 项目发布到 Python Packaging Index (PyPI)。

注意先决条件

在深入研究 Python Poetry 的细节之前,您需要了解一些先决条件。首先,您将阅读本教程中将遇到的术语的简短概述。接下来,您将安装 Poetry 本身。

相关术语

如果您曾经 import 在 Python 脚本中使用过语句,那么您就已经使用过 modules。其中一些模块可能是您自己编写的 Python 文件。其他可能是内置模块,例如 datetime。但是,有时 Python 提供的还不够。那时您可能会转向外部的打包模块。当您的 Python 代码依赖于外部模块时,您可以说这些是您项目的依赖项。

您可以在 PyPI 中找到不属于 Python 标准库的包。在了解其工作原理之前,您需要在系统上安装 Poetry。

Python Poetry 安装

要在命令行中使用 Poetry,您应该在系统范围内安装它。如果您只是想尝试一下,那么您可以使用 pip. 但是您应该谨慎尝试这种方法,因为 Poetry 将安装自己的依赖项,这可能会与您在项目中使用的其他包冲突。

安装 Poetry 的推荐方法是使用官方 install-poetry 脚本。您可以手动下载并运行此Python 文件,也可以在下方选择您的操作系统以使用相应的命令:

  • 视窗

  • Linux + macOS

PS C:\> (Invoke-WebRequest -Uri https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py -UseBasicParsing).Content | python -

如果您使用的是 Windows,那么您可以使用 Invoke-Webrequest 带有-UseBasicParsing 选项的 cmdlet 将请求的 URL 的内容下载到标准输出流 (stdout)。随着管道字符(|),你移交输出到标准输入流(标准输入)的 python。在这种情况下,您将的内容通过管道 install-poetry.py 传输到 Python 解释器。

注意:有些用户在 Windows 10 上使用 PowerShell 命令时会报告错误。

在输出中,您应该看到安装完成的消息。您可以 poetry --version 在终端中运行以查看是否 poetry 有效。此命令将显示您当前的 Poetry 版本。如果要更新 Poetry,则可以运行 poetry self update.

Python Poetry 入门

安装 Poetry 后,是时候看看 Poetry 是如何工作的了。在本节中,您将学习如何开始一个新的 Poetry 项目以及如何将 Poetry 添加到现有项目中。您还将看到项目结构并检查 pyproject.toml 文件。

创建一个新的 Poetry 项目

您可以使用 new 命令和项目名称作为参数来创建新的 Poetry 项目。在本教程中,该项目称为 rp-poetry. 创建项目,然后进入新创建的目录:

$ poetry new rp-poetry
$ cd rp-poetry

通过运行 poetry new rp-poetry,您可以创建一个名为 的新文件夹 rp-poetry/。当您查看文件夹内部时,您会看到一个结构:

rp-poetry/
│
├── rp_poetry/
│   └── __init__.py
│
├── tests/
│   ├── __init__.py
│   └── test_rp_poetry.py
│
├── README.rst
└── pyproject.toml

Poetry 会自动为您规范化包名。它将-项目名称中的破折号 ( ) 转换_为文件夹名称中的下划线 ( ) rp_poetry/。否则,Python 中将不允许使用该名称,因此您无法将其作为模块导入。为了更好地控制创建包名称,您可以使用该--name 选项以不同于项目文件夹的方式命名:

$ poetry new rp-poetry --name realpoetry

如果您更喜欢将源代码存储在额外的 src/父文件夹中,那么 Poetry 可以让您使用以下--src 标志来遵守该约定:

$ poetry new --src rp-poetry
$ cd rp-poetry

通过添加--src 标志,您创建了一个名为 的文件夹 src/,其中包含您的 rp_poetry/目录:

rp-poetry/
│
├── src/
│   │
│   └── rp_poetry/
│       └── __init__.py
│
├── tests/
│   ├── __init__.py
│   └── test_rp_poetry.py
│
├── README.rst
└── pyproject.toml

创建新的 Poetry 项目时,您将立即收到一个基本的文件夹结构。

检查项目结构

该 rp_poetry/子文件夹本身是不是很壮观呢。在这个目录中,你会找到一个__init__.py 包含你的包版本的文件:

# rp_poetry/__init__.py

__version__ = "0.1.0"

当您跳到 tests/文件夹并打开 时 test_rp_poetry.py,您会注意到它 rp_poetry 已经是可导入的:

# tests/test_rp_poetry.py

from rp_poetry import __version__

def test_version():
    assert __version__ == "0.1.0"

Poetry 还为该项目添加了第一个测试。该 test_version()函数检查 的__version__变量是否 rp_poetry/__init__.py 包含预期的版本。但是,该__init__.py 文件并不是您定义包版本的唯一位置。另一个位置是 pyproject.toml 文件。

使用 pyproject.toml 文件

使用 Poetry 最重要的文件之一是 pyproject.toml 文件。这个文件不是 Poetry 的发明。这是 PEP 518 中定义的配置文件标准:

此 PEP 指定 Python 软件包应如何指定它们具有的构建依赖项以执行其选择的构建系统。作为本规范的一部分,为软件包引入了一个新的配置文件,用于指定它们的构建依赖项(期望相同的配置文件将用于未来的配置细节)。(来源)

作者考虑了上面引用中提到的“新配置文件”的几种文件格式。最后,他们决定采用 TOML 格式,即 Tom's Obvious Minimal Language 的缩写。在他们看来,TOML

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值