使用 Poetry 和 VSCode 的 Python 项目(第一部分)- Python 速查表

虚拟环境是一个隔离的 Python 安装,旨在避免用我们可能只为一个项目使用的库填满基础环境。它还允许我们在不同的项目中管理同一包的多个版本。例如,一个项目可能需要 Django 4.1,而另一个需要 1.9。
Python Poetry
Poetry 是一个用于处理依赖项安装以及 Python 包的构建和打包的工具。它只需要一个文件即可完成所有这些工作:新的、标准化的 pyproject.toml`。换句话说,poetry 使用 pyproject.toml 来替代 setup.py、requirements.txt、setup.cfg、MANIFEST.in 和新添加的 Pipfile。
在这一系列文章中,我们将使用 Poetry 来管理我们的依赖项、构建一个简单的项目,并使用一个命令将其发布到 PyPI。
在第一部分中,我们将:
- 启动一个新项目。
- 创建一个虚拟环境。
- 管理依赖项。
在 第二篇文章 中,我们将:
- 将我们的虚拟环境添加到 VSCode。
- 集成我们的开发依赖项:
- Flake8
- Black
- Pytest
最后,在 第三篇文章 中,我们将:
- 编写一个示例库。
- 使用 Poetry 构建我们的项目。
- 将其发布到 PyPI。
安装 Poetry
最简单的方法是使用 pip:
pip install poetry
但我们将使用 Poetry 自己的安装程序,通过供应商化其依赖项来将其与系统其余部分隔离。这是安装 poetry 的推荐方式:
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -
通过这种方式,我们稍后将能够使用 poetry self update 命令将 poetry 更新到最新的稳定版本。
启动一个新项目
我们现在可以使用 poetry new [project_name] 命令启动一个新的 Python 项目。我将其命名为 how-long,它将是一个简单的库,用于测量函数执行时间:
poetry new how-long
注意:对于现有项目,您可以使用
poetry init命令以交互方式创建 pyproject.toml。
创建了 how-long 目录,其中包含一个基本项目结构:
how-long
├── README.rst
├── how_long
│ └── __init__.py
├── pyproject.toml
└── tests
├── __init__.py
└── test_how_long.py
有关处理文件和目录路径的全面指南,这对管理项目结构至关重要,请参阅 文件和目录路径 页面。
注意:要能够发布您的项目,您需要一个可用的名称。请使用 PyPI 搜索此信息。
pyproject.toml 文件
pyproject.toml 文件将管理项目的详细信息和依赖项:
[tool.poetry]
name = "how-long"
version = "0.1.0"
description = "A simple decorator to measure a function execution time."
authors = ["wilfredinni <carlos.w.montecinos@gmail.com>"]
[tool.poetry.dependencies]
python = "^3.7"
[tool.poetry.dev-dependencies]
pytest = "^3.0"
[build-system]
requires = ["poetry>=0.12"]
build-backend = "poetry.masonry.api"
[tool.poetry]
[tool.poetry]
...
license = "MIT"
readme = "README.rst"
[tool.poetry.dependencies]
首先是 Python 版本。基本上,这个项目将与 Python 3.7 及更高版本兼容。此外,从现在起,我们安装的每个打算用于生产的包都将列在此处。
[tool.poetry.dev-dependencies]
这些包仅用于开发,当我们构建和发布项目时不会包含它们。默认情况下,Poetry 会包含 Pytest,所以我们稍后会用它来测试我们的项目。
创建虚拟环境
要创建虚拟环境并安装 Pytest,我们将使用 poetry install 命令:
poetry install

完成后,将创建一个新文件 poetry.lock。
当 Poetry 完成安装后,它会将所有包及其下载的确切版本写入 poetry.lock 文件,将项目锁定到这些特定版本。您应该将 poetry.lock 文件提交到您的项目仓库,以便所有处理该项目的人都锁定在相同版本的依赖项上。
依赖管理
添加或删除依赖项的一种方法是直接编辑 pyproject.toml,然后运行 poetry install 来应用更改。我们将使用 add 和 remove 命令来避免手动修改。
添加依赖项
让我们向项目中添加两个包,pendulum 和 coo:
poetry add pendulum coo

打开 pyproject.toml 和 poetry.lock,看看它们是如何更新的。
添加开发依赖项
这些依赖项仅在开发期间可用,Poetry 在构建和发布项目时不会包含它们。
我们已经安装了 Pytest,但我们还将使用 flake8 进行代码检查和 mypy 进行静态类型检查:
poetry add -D flake8 mypy
现在我想了一下,我忘记添加一个格式化工具了。我们将使用 black:
poetry add -D black
[ValueError]
Could not find a matching version of package black
add [-D|--dev] [--git GIT] [--path PATH] [-E|--extras EXTRAS] [--optional] [--python PYTHON] [--platform PLATFORM] [--allow-prereleases] [--dry-run] [--] <name> (<name>)...
出现此错误是因为 black 处于预发布状态,因此 Poetry 找不到任何稳定版本。但我确实想要它,所以我们还是用 --allow-prereleases 标志安装它:
poetry add -D black --allow-prereleases

移除依赖项
你知道吗,我改变主意了,这个项目既不会使用 coo 也不会使用 mypy。首先删除 coo,它是我们项目的一个普通依赖项:
poetry remove coo
现在是 mypy,它是一个开发依赖项:
poetry remove -D mypy
结论
在第一部分中,我们启动了一个新项目,创建了一个虚拟环境,并使用以下命令添加和删除了依赖项:
| 命令 | 描述 |
|---|---|
poetry new [package-name] | 启动一个新的 Python 项目。 |
poetry init | 以交互方式创建 pyproject.toml 文件。 |
poetry install | 安装 pyproject.toml 文件中的包。 |
poetry add [package-name] | 向虚拟环境中添加一个包。 |
poetry add -D [package-name] | 向虚拟环境中添加一个开发包。 |
poetry remove [package-name] | 从虚拟环境中移除一个包。 |
poetry remove -D [package-name] | 从虚拟环境中移除一个开发包。 |
poetry self:update | 将 poetry 更新到最新的稳定版本。 |
在 第二篇文章 中,我们将了解更多 Poetry 命令,将我们的虚拟环境添加到 VSCode,并在编辑器中使用我们安装的开发包进行代码检查 (Flake8)、格式化 (Black) 和测试 (Pytest)。最后,在第三篇中,我们将编写并发布一个示例库到 PyPI。
有任何疑问或建议吗?请发表评论。