首页 > 其他分享 >强大的包管理器Poetry

强大的包管理器Poetry

时间:2022-10-16 22:02:28浏览次数:84  
标签:依赖 管理器 -- 强大 Poetry poetry install 安装

目录

Poetry

一、 概述

1、 介绍

Poetry 是Python 中用于依赖管理打包的工具。它允许您声明项目所依赖的库,并将为您管理(安装/更新)它们。Poetry 提供了一个锁定文件以确保可重复安装,并且可以构建您的项目以进行分发。

作为一个传统虚拟环境的实现,poetry 凭借其强大的依赖分析能力被大量项目所推荐的虚拟环境管理工具。

对于绝大部分的开发者而言,poetry 作为首选的虚拟环境管理工具是最优方案,其强大的依赖分析能力、环境封装能力以及庞大的社区均可为你的开发保驾护航,这也是我目前最为推荐所有 python 开发者所掌握的虚拟环境管理工具。

2、 环境配置

2.1 官方推荐

2.1.1 安装
curl -sSL https://install.python-poetry.org | python3 -

环境变量:

  • POETRY_HOME:安装目录
  • POETRY_PREVIEW:是否安装预发布版本,如果需要,设置为POETRY_PREVIEW=1
  • POETRY_VERSION:指定安装的版本
  • --git:从git存储库中安装

使用示例:

curl -sSL https://install.python-poetry.org | python3 - --git https://github.com/python-poetry/poetry.git@master
curl -sSL https://install.python-poetry.org | POETRY_VERSION=1.2.0 python3 -
2.1.2 配置环境变量

poetry安装程序在一个众所周知的、特定于平台的目录中创建一个包装器:

  • $HOME/.local/bin在 Unix 上
  • %APPDATA%\Python\Scripts在 Windows 上
  • $POETRY_HOME/bin如果$POETRY_HOME设置
2.1.3 更新poetry
poetry self update  # 更新
poetry self update --preview  # 安装预装版
poetry self update 1.2.0  # 更新到指定的版本
2.1.4 卸载poetry
curl -sSL https://install.python-poetry.org | python3 - --uninstall
curl -sSL https://install.python-poetry.org | POETRY_UNINSTALL=1 python3 -

2.2 pip安装

pip install poetry  # 安装诗歌
pipx upgrade poetry  # 更新诗歌
pip uninstall poetry  # 卸载诗歌

最后,使用poetry --version进行测试:

如果没法使用,记得将poetry添加到环境变量中去

二、 基础使用

1、 创建项目

poetry new poetry_demo

生成的目录结果为:

poetry-demo
├── pyproject.toml
├── README.rst
├── poetry_demo
│   └── __init__.py
└── tests
    ├── __init__.py
    └── test_poetry_demo.py

pyproject.toml文件是这里最重要的。这将协调您的项目及其依赖项。现在,它看起来像这样:

[tool.poetry]
name = "poetry-demo"
version = "0.1.0"
description = ""
authors = ["kun <[email protected]>"]
readme = "README.md"
packages = [{include = "poetry_demo"}]

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


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

2、 初始化包

Poetry 可用于“初始化”预填充目录,而不是创建新项目。在目录中以交互方式创建pyproject.toml文件pre-existing-project

cd pre-existing-project
poetry init

3、 指定依赖项

如果要向项目添加依赖项,可以在tool.poetry.dependencies部分中指定它们。

[tool.poetry.dependencies]
pendulum = "^2.1"

如您所见,它采用包名称版本约束的映射。

tool.poetry.sourcePoetry 使用此信息在您在该部分注册的包“存储库”中搜索正确的文件集,或者默认情况下在PyPI上搜索。

pyproject.toml此外,您可以使用add命令而不是手动修改文件。

poetry add pendulum

它将自动找到合适的版本约束并安装包和子依赖项。

Poetry 支持丰富的依赖规范语法,包括插入符号、波浪号、通配符、不等式和 多重约束要求。

4、 运行项目

要运行您的脚本,只需使用poetry run python your_script.py. 同样,如果您有命令行工具,pytest或者black您可以使用poetry run pytest.

同时,我们还可以手动激活虚拟环境:

poetry shell  # 进入
exit  # 退出

# 同时,还可以像pipenv一样指定虚拟环境激活,使用虚拟环境里面的activate文件

5、 安装依赖

Poetry如何下载正确的文件?

当您在 中指定依赖项时,Poetry 首先获取您请求的包的名称,并在您使用该密钥pyproject.toml注册的任何存储库中搜索它。repositories如果您没有注册任何额外的存储库,或者它在您指定的存储库中找不到具有该名称的包,它会回退到 PyPI。

当 Poetry 找到正确的包时,它会尝试为您指定的版本约束找到最佳匹配。

poetry install

使用这种方式时,有注意一个情况,就是在第一次运行后,会生成一个poetry.lock的文件,将第三方库的版本锁定,这意味着,后面的开发人员根据puproject.toml安装的时候,第三方库的版本是固定的。

installpoetry.lock文件存在时运行会解析并安装您在中列出的所有依赖项pyproject.toml,但 Poetry 使用中列出的确切版本poetry.lock来确保包版本对于在您的项目中工作的每个人都是一致的。

使用poetry.lock进行项目的版本控制是非常重要的

只安装依赖项的方法:

poetry install --no-root

poetry.lock文件会阻止您自动获取最新版本的依赖项。要更新到最新版本,请使用update命令。这将获取最新的匹配版本(根据您的pyproject.toml文件)并使用新版本更新锁定文件。(这相当于删除poetry.lock文件并install重新运行。)

6、 列出可用包

要列出所有可用的包,您可以使用该show命令。

poetry show

如果要查看某个包的详细信息,可以传递包名。

poetry show pendulum

# name        : pendulum
# version     : 1.4.2
# description : Python datetimes made easy
# 
# dependencies
#  - python-dateutil >=2.6.1
#  - tzlocal >=1.4
#  - pytzdata >=2017.2.2
# 
# required by
#  - calendar >=1.4.0

三、 管理依赖项

1、 依赖组

poetry提供了一种按组****组织依赖关系的方法。例如,您可能拥有仅在测试项目或构建文档时需要的依赖项。

要声明一个新的依赖组,请使用一个包含依赖组名称的tool.poetry.group.部分<group>例如,test:

[tool.poetry.group.test]  # This part can be left out

[tool.poetry.group.test.dependencies]
pytest = "^6.0.0"
pytest-mock = "*"

隐式main组:

[tool.poetry.dependencies]  # main dependency group
httpx = "*"
pendulum = "*"
[tool.poetry.group.test.dependencies]  # test组
pytest = "^6.0.0"
pytest-mock = "*"

[tool.poetry.group.dev.dependencies]  # dev组
pytest = "^6.0.0"
pytest-mock = "*"

2、 可选组

依赖组可以声明为可选。当您拥有一组仅在特定环境或特定目的中需要的依赖项时,这是有意义的。

[tool.poetry.group.docs]
optional = true

[tool.poetry.group.docs.dependencies]
mkdocs = "*"

我们使用--with命令将可选组添加到安装的第三方库中:

poetry install --with docs

3、 添加依赖

我们需要将依赖添加到指定的组中:

poetry add pytest --group test

如果该组尚不存在,则会自动创建。

依赖的规范在官方文档中较为详细:https://python-poetry.org/docs/dependency-specification/

4、 安装和删除

4.1 安装依赖组

poetry install --without test,docs  # 使用 --without 将指定组排除安装
poetry install --with docs  # 您使用 --with 选项选择加入可选组

一起使用时,--without优先于--with. 例如,以下命令将仅安装可选test组中指定的依赖项。

poetry install --with test,docs --without docs

最后,在某些情况下,您可能只想安装特定的依赖组而不安装默认的依赖组。为此,您可以使用该--only选项:

poetry install --only docs  # 安装可选组
poetry install --only main  # 安装项目的运行时依赖项
poetry install --only-root  # 如果要安装项目根目录,并且没有其他依赖项

4.2 删除依赖组

poetry remove mkdocs --group docs

从特定组中删除包的选项

4.2 同步依赖项

Poetry支持所谓的依赖同步。依赖同步确保poetry.lock文件中锁定的依赖是环境中唯一存在的依赖,删除任何不必要的依赖。

这是通过使用命令的--sync选项来完成的install

poetry install --sync

命令的一些详细的使用方法在官方文档中比较详细,大家可以查看官方文档:https://python-poetry.org/docs/cli/

四、 存储库

Poetry 支持使用PyPI和私有存储库来发现包以及发布您的项目。

默认情况下,Poetry 配置为使用PyPI存储库,用于包安装和发布。

因此,当您向项目添加依赖项时,Poetry 将假定它们在 PyPI 上可用。

这代表了大多数情况,对于大多数用户来说可能就足够了。

1、 换源

默认情况下,Poetry 配置为使用 Python 生态系统的规范包索引 PyPI

除了隐式配置的PyPI源之外pypi,包源是项目本地的,必须在项目 pyproject.toml文件中配置。这与发布包时使用的配置不同

从私有包源安装第三方库:

poetry source add foo https://pypi.example.org/simple/

在配置文件中生成以下配置:

[[tool.poetry.source]]
name = "foo"
url = "https://foo.bar/simple/"
default = false
secondary = false

注意:

  • 如果为项目定义了包源,则这些源将优先于 PyPI。如果您不希望出现这种情况,则应将所有包源声明为secondary

配置默认包源

默认情况下,Poetry 将PyPI配置为项目的默认包源。您可以更改此行为并仅通过添加带有default = true.

poetry source add --default foo1 https://pypi.example.org/simple/

次要包源

如果包源配置为辅助,这意味着在选择默认包源中也存在的兼容包分发时,这些将被赋予较低的优先级。

您可以在包源配置中将包源配置为辅助源secondary = true

poetry source add --secondary foo2 https://pypi.tuna.tsinghua.edu.cn/simple

可以有多个二级包源

同时,每个包可以指定从一个包源下载:

poetry add --source pypi httpx@^0.22.0  # 使用@指定httpx的版本

2、 发布存储库

2.1 配置凭证

poetry config http-basic.foo <username> <password>

比如,配置pypi的令牌和凭证

poetry config pypi-token.pypi my-token  # 配置令牌
poetry config http-basic.pypi <username> <password>  # 使用用户名和密码配置凭证

2.2 生成并发布

锁定文件处理:

对于您的库,您可以根据poetry.lock需要提交文件。这可以帮助您的团队始终针对相同的依赖项版本进行测试。但是,这个锁文件不会对其他依赖它的项目产生任何影响。它只对主项目有影响。

如果您不想提交锁定文件并且正在使用 git,请将其添加到.gitignore.

poetry build --build  # 发布前进行包的生成

此命令将以两种不同的格式打包您的库:sdist一种是源格式,另wheel一种是compiled包。

使用poetry publish -r my-repository发布到私有库

标签:依赖,管理器,--,强大,Poetry,poetry,install,安装
From: https://www.cnblogs.com/liuzhongkun/p/16797346.html

相关文章