诗歌:Python的依赖项管理
POLITY可帮助您声明、管理和安装Python项目的依赖项,确保您随时随地都拥有正确的堆栈
支持Python 2.7和3.5+
注意事项 :在下一个功能版本(1.2)中将不再支持Python 2.7和3.5。您应该考虑将Python版本更新为支持的版本
这个complete documentation 可在official website
安装
POLITY提供了一个自定义安装程序,该安装程序将安装poetry
与您系统的睡觉隔离
osx/linux/bashonwindows安装说明
curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/install-poetry.py | python -
Windows PowerShell安装说明
(Invoke-WebRequest - Uri https:// raw.githubusercontent.com / python- poetry/ poetry/ master/ install-poetry .py - UseBasicParsing).Content | python -
警告 :上一次get-poetry.py
安装程序现在已弃用,如果您当前正在使用它,则应迁移到新的、受支持的install-poetry.py
安装程序
安装程序将安装poetry
诗歌的工具bin
目录。此位置取决于您的系统:
$HOME/.local/bin
对于Unix
%APPDATA%\Python\Scripts
在Windows上
如果此目录不在您的PATH
,您需要手动添加,如果您想要用简单的poetry
或者,您可以使用完整路径来poetry
使用它
一旦安装了Poetry,您就可以执行以下操作:
如果你看到类似这样的东西Poetry (version 1.2.0)
那么您就可以使用诗歌了。如果您认为“诗歌”不适合您,您可以通过使用以下命令再次运行安装程序将其从系统中完全删除--uninstall
选项,或通过将POETRY_UNINSTALL
环境变量,然后执行安装程序
python install-poetry.py --uninstall
POETRY_UNINSTALL=1 python install-poetry.py
默认情况下,“诗歌”安装到用户特定于平台的主目录中。如果您希望更改此设置,您可以定义POETRY_HOME
环境变量:
POETRY_HOME=/etc/poetry python install-poetry.py
如果要安装预发行版本,可以通过传递--preview
选项以执行以下操作install-poetry.py
或使用POETRY_PREVIEW
环境变量:
python install-poetry.py --preview
POETRY_PREVIEW=1 python install-poetry.py
同样,如果要安装特定版本,可以使用--version
选项或POETRY_VERSION
环境变量:
python install-poetry.py --version 1.2.0
POETRY_VERSION=1.2.0 python install-poetry.py
您还可以为git
存储库通过使用--git
选项:
python install-poetry.py --git https://github.com/python-poetry/poetry.git@master
注意事项 :请注意,安装程序不支持Python<3.6
正在更新poetry
将诗歌更新到最新的稳定版本非常简单,只需调用self update
命令
警告 :使用现已弃用的软件安装的诗歌版本get-poetry.py
安装程序将无法使用此命令更新到1.2版或更高版本。迁移到使用install-poetry.py
安装程序或pipx
如果要安装预发行版本,可以使用--preview
选项
poetry self update --preview
最后,如果要安装特定版本,可以将其作为参数传递给self update
启用Bash、Fish或Zsh的制表符完成
poetry
支持为Bash、Fish和Zsh生成完成脚本。看见poetry help completions
获取完整的详细信息,但要点很简单,只需使用以下选项之一:
# Bash
poetry completions bash > /etc/bash_completion.d/poetry.bash-completion
# Bash (Homebrew)
poetry completions bash > $( brew --prefix) /etc/bash_completion.d/poetry.bash-completion
# Fish
poetry completions fish > ~ /.config/fish/completions/poetry.fish
# Fish (Homebrew)
poetry completions fish > (brew --prefix)/share/fish/vendor_completions.d/poetry.fish
# Zsh
poetry completions zsh > ~ /.zfunc/_poetry
# Zsh (Homebrew)
poetry completions zsh > $( brew --prefix) /share/zsh/site-functions/_poetry
# Zsh (Oh-My-Zsh)
mkdir $ZSH_CUSTOM /plugins/poetry
poetry completions zsh > $ZSH_CUSTOM /plugins/poetry/_poetry
# Zsh (prezto)
poetry completions zsh > ~ /.zprezto/modules/completion/external/src/_poetry
注: 您可能需要重新启动shell才能使更改生效
为zsh
,则必须在您的~/.zshrc
在此之前compinit
(不适用于自制安装):
引言
poetry
是一个处理依赖项安装以及构建和打包Python包的工具。它只需要一个文件就可以完成所有这些任务:新的、standardized pyproject.toml
换句话说,诗歌使用pyproject.toml
替换setup.py
,requirements.txt
,setup.cfg
,MANIFEST.in
和新添加的Pipfile
tool.poetry ]
name = " my-package"
version = " 0.1.0"
description = " The description of the package"
license = " MIT"
authors = [
" Sébastien Eustace <sebastien@eustace.io>"
]
readme = ' README.md' # Markdown files are supported
repository = " https://github.com/python-poetry/poetry"
homepage = " https://github.com/python-poetry/poetry"
keywords = [' packaging' , ' poetry' ]
[tool .poetry .dependencies ]
python = " ~2.7 || ^3.2" # Compatible python versions must be declared here
toml = " ^0.9"
# Dependencies with extras
requests = { version = " ^2.13" , extras = [ " security" ] }
# Python specific dependencies with prereleases allowed
pathlib2 = { version = " ^2.2" , python = " ~2.7" , allow-prereleases = true }
# Git dependencies
cleo = { git = " https://github.com/sdispater/cleo.git" , branch = " master" }
# Optional dependencies (extras)
pendulum = { version = " ^1.4" , optional = true }
[tool .poetry .dev-dependencies ]
pytest = " ^3.0"
pytest-cov = " ^2.4"
[tool .poetry .scripts ]
my-script = ' my_package:main'
这里有一些我们可以注意到的事情:
它将试图强制执行semantic versioning 作为版本命名的最佳实践
您可以指定自述文件、包含文件和排除文件:不能更多MANIFEST.in
poetry
还将使用VCS忽略文件(如.gitignore
)以填充exclude
部分
可以指定关键字(最多5个),并将其作为包装站点上的标签
依赖关系部分支持脱字符、代字号、通配符、不等式和多个要求
您必须指定软件包兼容的Python版本
poetry
还将检测您是否在Virtualenv中,并相应地安装软件包。所以,poetry
可以在全球范围内安装并在任何地方使用
poetry
还附带一个完整的依赖项解析库
为什么?
Python中的打包系统和依赖项管理相当复杂,对于新手来说很难理解。即使对于经验丰富的开发人员来说,创建Python项目中所需的所有文件有时也可能很麻烦:setup.py
,requirements.txt
,setup.cfg
,MANIFEST.in
和新添加的Pipfile
因此,我想要一个工具,它可以将所有操作都限制在单个配置文件中来完成:依赖项管理、打包和发布
它需要从其他语言中存在的工具中获得灵感,比如composer
(PHP)或cargo
(生锈)
最后,我开始poetry
为Python社区带来另一个详尽的依赖解析器Conda’s
那皮佩诺夫呢?
简而言之:我不喜欢它提供的CLI,也不喜欢它做出的一些决定,我认为我们可以做出更好、更直观的决定。这里有几件我不喜欢的东西
依赖项解析
依赖项解析不稳定,即使有解决方案也会失败。让我们举个例子:
pipenv install oslo.utils==1.4.0
将失败,并显示此错误:
Could not find a version that matches pbr!=0.7,!=2.1.0,<1.0,>=0.6,>=2.0.0
而诗会给你提供一套合适的套餐:
poetry add oslo.utils=1.4.0
结果是:
- Installing pytz (2018.3)
- Installing netifaces (0.10.6)
- Installing netaddr (0.7.19)
- Installing oslo.i18n (2.1.0)
- Installing iso8601 (0.1.12)
- Installing six (1.11.0)
- Installing babel (2.5.3)
- Installing pbr (0.11.1)
- Installing oslo.utils (1.4.0)
这要归功于诗歌核心的高效依赖解析器
以下是这里具体发生的情况的细目:
oslo.utils (1.4.0)
取决于:
pbr (>=0.6,!=0.7,<1.0)
Babel (>=1.3)
six (>=1.9.0)
iso8601 (>=0.1.9)
oslo.i18n (>=1.3.0)
netaddr (>=0.7.12)
netifaces (>=0.10.4)
我们感兴趣的是pbr (>=0.6,!=0.7,<1.0)
在这一点上,诗歌将选择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
,所以poetry
将尝试查找一个版本的oslo.i18n
那是令人满意的pbr (>=0.6,!=0.7,<1.0)
通过分析oslo.i18n
,它会找到oslo.i18n==2.1.0
这就需要pbr (>=0.11,<2.0)
在这一点上,决议的睡觉是直截了当的,因为不再有冲突
资源