目录
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.source
Poetry 使用此信息在您在该部分注册的包“存储库”中搜索正确的文件集,或者默认情况下在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
安装的时候,第三方库的版本是固定的。
install
当poetry.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 # 发布前进行包的生成
标签:依赖,管理器,--,强大,Poetry,poetry,install,安装 From: https://www.cnblogs.com/liuzhongkun/p/16797346.html此命令将以两种不同的格式打包您的库:
sdist
一种是源格式,另wheel
一种是compiled
包。使用
poetry publish -r my-repository
发布到私有库