python依赖项管理和打包变得简单。
poetry-plus的Python项目详细描述
poetry:python的依赖管理
poetry帮助您声明、管理和安装python项目的依赖项, 确保您在任何地方都有正确的堆栈。
它支持Python2.7和3.4+。
安装
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.py
,requirements.txt
,setup.cfg
,manifest.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中,并相应地安装软件包。
因此,诗歌
可以在全球安装并在任何地方使用。
诗歌
还提供了一个完整的依赖关系解析库,灵感来自于molinillo./p>
为什么?
python中的打包系统和依赖关系管理相当复杂,对于新手来说很难理解。
即使对于经验丰富的开发人员,有时创建python项目中所需的所有文件也可能很麻烦:setup.py
,
requirements.txt
,setup.cfg
,manifest.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
命令只删除指定的包,而不删除其依赖项
如果不再需要它们。
您必须使用sync
或clean
来解决这个问题。
范围太有限
最后,pipfile
只是从requirements.txt
替换而来,最后,您仍然需要
用在pipfile
中声明的完全相同的依赖项填充setup.py
文件(或setup.cfg
)。
因此,最终,您仍然需要管理一些配置文件才能正确设置项目。
命令
< 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
如果当前目录中有一个pyproject.lock
文件,
它将使用那里的精确版本,而不是解析它们。
这样可以确保每个使用库的人都能获得相同版本的依赖项。
如果没有pyproject.lock文件,诗歌将在依赖关系解析后创建一个。
您可以通过传递
--no dev
选项。
python get-poetry.py --preview0
您还可以指定要安装的附加组件
通过传递--e--extras
选项(有关详细信息,请参见extras)
python get-poetry.py --preview1
选项
--无开发
:不要安装开发依赖项。-e--附加功能
:要安装的功能(允许多个值)。
更新
为了获得依赖项的最新版本并更新pyproject.lock
文件,
您应该使用update
命令。
python get-poetry.py --preview2
这将解析项目的所有依赖项,并将准确的版本写入pyproject.lock
如果您只想更新一些软件包,而不是全部软件包,则可以将其列为:
python get-poetry.py --preview3
选项
--dry run
:输出操作,但不执行任何操作(隐式启用--verbose)。
add
命令将所需的包添加到您的pyproject.toml
并安装它们。
如果不指定版本约束, Poetry将根据可用的软件包版本选择合适的软件包。
python get-poetry.py --preview4
选项
--d dev
:添加包作为开发依赖项。--可选
:作为可选依赖项添加。--dry run
:输出操作,但不执行任何操作(隐式启用--verbose)。
删除
remove
命令从当前
已安装软件包的列表
python get-poetry.py --preview5
选项
--d dev
:从开发依赖项中删除包。--dry run
:输出操作,但不执行任何操作(隐式启用--verbose)。
显示
要列出所有可用的软件包,可以使用show
命令。
python get-poetry.py --preview6
如果您想查看某个软件包的详细信息,可以传递软件包名称。
python get-poetry.py --preview7
选项
--树
:将依赖项列为树。-l--最新版本
:显示最新版本。-o--过时
:显示最新版本,但仅适用于过时的软件包。
构建
build
命令生成源文件和控制盘文件。
python get-poetry.py --preview8
请注意,目前只支持纯python轮子。
选项
-f——格式
:限制f或设置为车轮或列表。
发布
此命令生成(如果尚未生成)并将包发布到远程存储库。
如果这是第一次提交包,它将在上载前自动注册包。
python get-poetry.py --preview9
选项
-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+
可选,但强烈建议提供。 更多标识符在spdx开源许可证注册表中列出。
作者
包的作者。这是一个作者列表,至少应包含一个作者。
作者必须采用name<;email>;
格式
自述文件
包的自述文件。必需的
文件可以是readme.rst
或readme.md
主页
项目网站的URL。可选
存储库
指向项目存储库的URL。可选
文档
项目文档的URL。可选
关键字
与包相关的关键字列表(最大值:5)。可选
包括和排除
最终包装中包含的图案列表。
你可以明确地给诗歌指定球的ET应忽略或包含在包装中。 "排除"字段中指定的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 poetry0
插入符号要求
插入符号要求允许对指定版本进行与semver兼容的更新。
如果新版本号没有修改主要、次要修补程序分组中最左边的非零位,则允许更新。
在这种情况下,如果我们运行poetry update requests
,poetry会将我们更新到2.14.0
版本(如果可用)。
但不会更新到3.0.0
。
如果我们将版本字符串指定为^0.1.13
,则poetry将更新为0.1.14
,而不是0.2.0
。
0.0.x
不被认为与任何其他版本兼容。
下面是插入符号要求的更多示例以及它们所允许的版本:
pip install --user poetry1
瓷砖要求
颚化符要求指定具有某种更新能力的最低版本。 如果指定主要、次要和修补程序版本,或仅指定主要和次要版本,则只允许修补程序级别的更改。 如果只指定主要版本,则允许进行次要和修补程序级别的更改。
~1.2.3
是瓷砖要求的一个例子。
pip install --user poetry2
通配符要求
通配符要求允许使用通配符所在的任何版本。
*
、1.*
和1.2.*
是通配符要求的示例。
pip install --user poetry3
不平等要求
不等要求允许手动指定要依赖的版本范围或精确版本。
下面是一些不等式要求的示例:
pip install --user poetry4
多项要求
多个版本需求也可以用逗号分隔,例如>;=1.2,<;1.5
git
依赖项
要依赖位于git
存储库中的库,
您需要指定的最小信息是带有git键的存储库的位置:
pip install --user poetry5
因为我们没有说明任何其他信息,
poetry假设我们打算使用 您还可以指定只应为特定的python版本安装依赖项: 本节介绍安装软件包时将安装的脚本或可执行文件 使用上述toml安装包后, 诗歌支持附加功能,允许表达: 安装软件包时,可以使用 poetry支持类似于
设置工具入口点。
要匹配setuptools文档中的示例,请使用以下命令:master
分支上的最新提交来构建我们的项目。
您可以将git
键与rev
、tag
或branch
键组合起来指定其他项。
下面是一个指定要在名为next的分支上使用最新提交的示例
pip install --user poetry
6
受python限制的依赖项
pip install --user poetry
7
pip install --user poetry
8
脚本
pip install --user poetry
9
poetry
将是一个全局命令,可从命令行执行控制台。在
poetry
包中运行。
附加功能
poetry self:update
0
-e--extras
选项指定附加功能:python get-poetry.py --preview
1
插件
poetry self:update
2
资源
推荐PyPI第三方库