python依赖项管理和打包变得简单。

poetr的Python项目详细描述


poetry:python的依赖管理

poetry帮助您声明、管理和安装python项目的依赖项, 确保您在任何地方都有正确的堆栈。

poetry install

它支持Python2.7和3.4+。

unix构建状态Windows生成状态

安装

poetry提供了一个自定义安装程序,它将安装poetry独立的 从系统的其他部分自动贩卖其依赖项。这就是 安装诗歌的推荐方法

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

或者,您可以下载get poetry.py文件并单独执行它。

如果要安装预发行版,可以通过将--preview传递到get poetry.py

python get-poetry.py --preview

同样,如果要安装特定版本,可以使用--version

python get-poetry.py --version 0.7.0

也可以使用pip安装诗歌。

pip install --user poetry

不过,请注意,它也会安装诗歌的依赖项 可能导致冲突。

更新诗歌

将poetry更新到最新的稳定版本就像调用self:update命令一样简单。

poetry self:update

如果要安装预发行版本,可以使用--preview选项。

poetry self:update --preview

最后,如果您想安装一个特定的版本,可以将其作为参数传递 自我更新

poetry self:update 0.8.0

为bash、fish或zsh启用制表符完成功能

poetry支持生成bash、fish和zsh的完成脚本。 有关详细信息,请参见诗歌帮助完成部分,但要点很简单,只需使用以下方法之一:

# Bash
poetry completions bash > /etc/bash_completion.d/poetry.bash-completion

# Bash (macOS/Homebrew)
poetry completions bash > $(brew --prefix)/etc/bash_completion.d/poetry.bash-completion

# Fish
poetry completions fish > ~/.config/fish/completions/poetry.fish

# Zsh
poetry completions zsh > ~/.zfunc/_poetry

注意:您可能需要重新启动shell才能进行更改 效果:

对于zsh,必须在前面的~/.zshrc中添加以下行 compinit

fpath+=~/.zfunc

简介

poetry是一个处理依赖项安装以及构建和打包python包的工具。 它只需要一个文件即可完成所有这些工作:新的、标准化的pyproject.toml

换句话说,poetry使用pyproject.toml替换setup.pyrequirements.txtsetup.cfgmanifest.in和新添加的pipfile

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
0

我们可以注意到以下几点:

  • 它将尝试实施语义版本控制,作为版本命名的最佳实践。
  • 您可以指定自述文件、包含文件和排除文件:不再manifest.in诗歌还将使用VCS ignore文件(如.gitignore)填充排除部分。
  • 关键字(最多5个)可以指定,并将作为包装站点上的标记。
  • 依赖项部分支持插入符号、颚化符、通配符、不等式和多个要求。
  • 必须指定与包兼容的python版本。

poetry还将检测您是否在virtualenv中,并相应地安装软件包。 因此,诗歌可以在全球安装并在任何地方使用。

诗歌还配有一个完整的依赖关系解析库。

为什么?

python中的打包系统和依赖关系管理相当复杂,对于新手来说很难理解。 即使对于经验丰富的开发人员,有时创建python项目中所需的所有文件也可能很麻烦:setup.pyrequirements.txtsetup.cfgmanifest.in和新添加的pipfile

所以我想要一个工具,它可以将所有事情限制在一个配置文件中: 依赖关系管理、打包和发布。

它的灵感来自于其他语言中存在的工具,如composer(php)或cargo(rust)。

最后,没有可靠的工具可以正确地解决python中的依赖关系,所以我开始了poetry 为python社区带来一个详尽的依赖解析程序。

Pipenv呢?

简而言之:我不喜欢它提供的cli,也不喜欢它做出的一些决定, 我想我们可以做一个更好更直观的。有几件事 我不喜欢的。

依赖项解析

依赖项解析是不稳定的,即使有解决方案也会失败。举个例子:

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
1

将失败并出现此错误:

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
2

而诗歌将为您提供一套合适的套餐:

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
3

结果:

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
4

这是可能的,因为诗歌的核心是高效的依赖解析程序。

下面是这里发生的具体情况的明细:

oslo.utils(1.4.0)取决于:

  • pbr(>;=0.6,!=0.7,<;1.0)
  • 巴别塔(>;=1.3)
  • 6(>;=1.9.0)
  • ISO8601(>;=0.1.9)
  • oslo.i18n(>;=1.3.0)
  • netaddr(>;=0.7.12)
  • 网络面(>;=0.10.4)

让我们感兴趣的是pbr(>;=0.6,!=0.7,<;1.0)

此时,poetry将选择pbr==0.11.1这是与约束匹配的最新版本。

接下来,它将尝试选择oslo.i18n==3.20.0这是与oslo.i18n(>;=1.3.0)匹配的最新版本。

但是这个版本需要pbr(!=2.1.0,>;=2.0.0)这与pbr==0.11.1不兼容, 因此诗歌将试图找到一个满足pbr(>;=0.6,)的版本oslo.i18n!=0.7,<;1.0)

通过分析oslo.i18n的版本,可以发现需要pbr(>;=0.11,<;2.0)oslo.i18n==2.1.0。 在这一点上,解决方案的其余部分是直截了当的,因为不再有冲突。

安装命令

当您在install命令中指定包时,它会将其添加为通配符 附属国。这意味着可以安装此软件包的任何版本 可能导致兼容性问题。

另外,当您 安装新的。这应该是默认值。

删除命令

remove命令只删除指定的包,而不删除其依赖项 如果不再需要它们。

您必须使用syncclean来解决这个问题。

范围太有限

最后,pipfile只是从requirements.txt替换而来,最后,您仍然需要 用在中声明的完全相同的依赖项填充setup.py文件(或setup.cfg)>pipfile。 因此,最终,您仍然需要管理一些配置文件才能正确设置项目。

命令

< H3>新

这个命令将帮助您通过创建 适合大多数项目的目录结构。

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
5

将按如下方式创建文件夹:

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
6

如果您想用与文件夹不同的名称命名项目,可以通过 --name选项:

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
7

初始化

此命令将帮助您以交互方式创建pyproject.toml文件 提示您提供有关您的软件包的基本信息。

它将交互式地要求您填写字段,同时使用一些智能默认值。

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
8

选项

  • --name:包的名称。
  • --说明:包的说明。
  • --作者:包的作者。
  • --dependency:需要具有版本约束的包。格式应为foo:1.0.0
  • --dev dependency:开发需求,请参见--require

安装

install命令从当前目录读取pyproject.toml文件,解析依赖项, 并安装它们。

curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python
9

如果当前目录中有一个poetry.lock文件, 它将使用那里的精确版本,而不是解析它们。 这样可以确保每个使用库的人都能获得相同版本的依赖项。

如果没有poetry.lock文件,poetry将在依赖关系解析之后创建一个文件。

您可以通过传递 --no dev选项。

python get-poetry.py --preview
0

您还可以指定要安装的附加组件 通过传递--e--extras选项(有关详细信息,请参见extras

python get-poetry.py --preview
1

选项

  • --无开发:不要安装开发依赖项。
  • -e--附加功能:要安装的功能(允许多个值)。

更新

为了获得依赖项的最新版本并更新poetry.lock文件, 您应该使用update命令。

python get-poetry.py --preview
2

这将解决项目的所有依赖项,并将精确版本写入poetry.lock

如果您只想更新一些软件包,而不是全部软件包,则可以将其列为:

python get-poetry.py --preview
3

选项

  • --dry run:输出操作,但不执行任何操作(隐式启用--verbose)。
  • --无开发:不要安装开发依赖项。
  • --lock:不要执行安装(只更新锁定文件)。
< H3>添加< /H3>

add命令将所需的包添加到您的pyproject.toml并安装它们。

如果不指定版本约束, Poetry将根据可用的软件包版本选择合适的软件包。

python get-poetry.py --preview
4

选项

  • --d dev:添加包作为开发依赖项。
  • --可选:作为可选依赖项添加。
  • --dry run:输出操作,但不执行任何操作(隐式启用--verbose)。

删除

remove命令从当前 已安装软件包的列表

python get-poetry.py --preview
5

选项

  • --d dev:从开发依赖项中删除包。
  • --dry run:输出操作,但不执行任何操作(隐式启用--verbose)。

显示

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

python get-poetry.py --preview
6

如果您想查看某个软件包的详细信息,可以传递软件包名称。

python get-poetry.py --preview
7

选项

  • --没有dev:不要列出dev依赖项。
  • --树:将依赖项列为树。
  • -l--最新版本:显示最新版本。
  • -o--过时:显示最新版本,但仅适用于过时的软件包。

构建

build命令生成源文件和控制盘文件。

python get-poetry.py --preview
8

请注意,目前只支持纯python轮子。

选项

  • -f--格式:将格式限制为wheel或sdist。

发布

此命令生成(如果尚未生成)并将包发布到远程存储库。

如果这是第一次提交包,它将在上载前自动注册包。

python get-poetry.py --preview
9

选项

  • -r--repository:要将包注册到的存储库(默认值:pypi)。 应该匹配由config命令设置的存储库名称。
  • --用户名(-u):访问存储库的用户名。
  • --密码(-p):访问存储库的密码。

配置

config命令允许您编辑诗歌配置设置和存储库。

python get-poetry.py --version 0.7.0
0

用法

python get-poetry.py --version 0.7.0
1

设置键是配置选项名称,设置值1是配置值。

修改存储库

除了修改配置部分之外, config命令还支持通过以下方式对repositories部分进行更改:

python get-poetry.py --version 0.7.0
2

这将把repositoryfoo的url设置为https://foo.bar/simple/

如果要存储特定存储库的凭据,可以轻松地进行存储:

python get-poetry.py --version 0.7.0
3

如果不指定密码,系统将提示您编写密码。

选项

  • --unset:删除由设置键命名的配置元素
  • --list:显示当前配置变量的列表。

搜索

此命令搜索远程索引上的包。

python get-poetry.py --version 0.7.0
4

选项

  • -n--仅名称:仅在名称中搜索。

锁定

此命令锁定(不安装)在pyproject.toml中指定的依赖项。

python get-poetry.py --version 0.7.0
5

pyproject.toml文件

pyproject.toml文件的tool.poetry部分由多个部分组成。

名称

包的名称。必需的

版本

包的版本。必需的

这应该遵循语义版本控制。但是它不会被强制执行,你仍然 可自由遵循其他规格。

说明

对包裹的简短描述。必需的

许可证

软件包的许可证。

最常见许可证的推荐符号是(按字母顺序):

  • apache-2.0
  • BSD-2条款
  • BSD-3-条款
  • BSD-4条款
  • GPL-2.0
  • GPL-2.0+
  • GPL-3.0
  • GPL-3.0+
  • lgpl-2.1
  • lgpl-2.1+
  • lgpl-3.0
  • lgpl-3.0+
  • 麻省理工学院/LI>

可选,但强烈建议提供。 更多标识符在spdx开源许可证注册表中列出。

作者

包的作者。必需的

这是一个作者列表,应该至少包含一个作者。作者必须采用name<;email>;格式

自述文件

包的自述文件。必需的

文件可以是readme.rstreadme.md

主页

项目网站的URL。可选

存储库

指向项目存储库的URL。可选

文档

项目文档的URL。可选

关键字

与包相关的关键字列表(最大值:5)。可选

包括和排除

最终包装中包含的图案列表。

您可以显式地向poetry指定一组globs应被忽略或包含以用于打包。 "排除"字段中指定的globs标识生成包时未包含的一组文件。

如果VCS正在用于包,则exclude字段将以VCS的ignore settings作为种子(.gitignore例如对于git)。

python get-poetry.py --version 0.7.0
6
python get-poetry.py --version 0.7.0
7

依赖关系开发依赖关系

默认情况下,poetry配置为查找对pypi的依赖关系。 在这种情况下,只需要名称和版本字符串。

python get-poetry.py --version 0.7.0
8

如果要使用私有存储库,可以将其添加到pyproject.toml文件中,如下所示:

python get-poetry.py --version 0.7.0
9

请注意声明您的包所针对的python版本 兼容是必需的:

pip install --user poetry
0

插入符号要求

插入符号要求允许对指定版本进行与semver兼容的更新。 如果新版本号没有修改主要、次要修补程序分组中最左边的非零位,则允许更新。 在这种情况下,如果我们运行poetry update requests,poetry会将我们更新到2.14.0版本(如果可用)。 但不会更新到3.0.0。 如果我们将版本字符串指定为^0.1.13,则poetry将更新为0.1.14,而不是0.2.00.0.x不被认为与任何其他版本兼容。

下面是插入符号要求的更多示例以及它们所允许的版本:

pip install --user poetry
1

瓷砖要求

颚化符要求指定具有某种更新能力的最低版本。 如果指定主要、次要和修补程序版本,或仅指定主要和次要版本,则只允许修补程序级别的更改。 如果只指定主要版本,则允许进行次要和修补程序级别的更改。

~1.2.3是瓷砖要求的一个例子。

pip install --user poetry
2

通配符要求

通配符要求允许使用通配符所在的任何版本。

*1.*1.2.*是通配符要求的示例。

pip install --user poetry
3

不平等要求

不等要求允许手动指定要依赖的版本范围或精确版本。

下面是一些不等式要求的示例:

pip install --user poetry
4

多项要求

多个版本需求也可以用逗号分隔,例如>;=1.2,<;1.5

git依赖项

要依赖位于git存储库中的库, 您需要指定的最小信息是带有git键的存储库的位置:

pip install --user poetry
5

因为我们没有说明任何其他信息, poetry假设我们打算使用master分支上的最新提交来构建我们的项目。 您可以将git键与revtagbranch键组合起来指定其他项。 下面是一个指定要在名为next的分支上使用最新提交的示例

pip install --user poetry
6

受python限制的依赖项

还可以指定只应为特定的python版本安装依赖项

pip install --user poetry
7
pip install --user poetry
8

脚本

本节介绍安装软件包时将安装的脚本或可执行文件

pip install --user poetry
9

使用上述toml安装包后,poetry将是一个全局命令,可从命令行执行控制台。在poetry包中运行

附加功能

诗歌支持附加功能,允许表达:

  • 可选的依赖项,可增强包,但不是必需的;以及
  • 可选依赖项的群集。
poetry self:update
0

安装软件包时,可以使用-e--extras选项指定附加功能:

python get-poetry.py --preview
1

插件

poetry支持类似于 设置工具入口点。 要匹配setuptools文档中的示例,请使用以下命令:

poetry self:update
2

资源

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java如何定制springdata存储库方法名称?   html有没有办法将java应用程序或JApplet嵌入到网站中?   Jackson ObjectMapper将java从字符串序列化为JSON作为namevalue   java刷新JTable?   用Java程序分发用JavaDB制作的数据库   java Android如何启动新活动   当集合大小超过500.000时,java的处理速度会显著降低   在java的分层目录中的多个目录中查找相同的文件   java如何将ArrayList数据插入数据库   java如何修改此代码,使其时间复杂度为o(logn)或o(n),而不是o(n^2)   java面板(SimplePanel)中仅显示图像的前1/3(大约),   jakarta ee Java Bean和企业Java Bean之间的区别?   创建AWS Cloudfront自签名URL(java sdk)时出现amazon web服务错误   基于Jersey和Jackson查询参数的java动态属性过滤