• Python web 项目的依赖管理工具


    Poetry可以帮助你声明、管理和安装Python项目的依赖项,确保你可以在任何地方都拥有正确的堆栈。

    Poetry支持Python 2.7 和Python 3以上

    安装

    Poetry提供了一个自定义安装程序,它通过打包自己依赖项的方式来确保Poetry与系统其他部分隔离。本文推荐通过这种方法来安装Poetry。

    image.png

    或者,你也可以下载并单独执行get-poetry.py文件。

    如果你想要安装预发布版本,你可以执行get-poetry.py –preview命令:

    image.png

    类似地,如果你想要安装一个特定的版本,你可以使用命令 --version:

    image.png

    也可以使用pip来安装poetry。

    image.png

    然而请注意,它还将继续安装Poetry的依赖,而这很可能会引起冲突。

    升级 poetry

    将poetry升级到最新的稳定版本只需要简单的调用self:update命令。

    image.png

    如果你想安装预发布版本,你可以使用--preview选项。

    image.png

    最后,如果你想要安装一个特定的版本,你可以把版本号作为一个参数传递给self:update。

    image.png

    为Bash、Fish或Zsh启用tab补全功能

    Poetry支持生成Bash、Fish和Zsh的自动补全脚本。完整细节请参阅poetry help completions,要点非常简单,只要使用以下命令中的某一个:

    注意:为了使更改生效,您可能需要重新启动shell。

    对于zsh,您必须在compinit之前,在~/.zshrc中添加以下行。:

    image.png

    简介

    poetry是一款用来处理依赖项的安装、构建和打包成Python包的工具。只需要一个标准的pyproject.toml文件就可以完成以上所有任务。

    换句话说,poetry用pyproject.toml取代了setup.py, requirements.txt, setup.cfg, MANIFEST.in 以及最新加入的Pipfile。

    这里有一些我们需要注意的事情:

    l  它将尝试将语义版本控制作为版本命名的最佳实践。

    l  你可以指定自述文件、需要包含和排除的文件:不再需要使用MANIFEST.in。Poetry也会使用VCS的忽略文件(如gitignore)来填充exclude部分。

    l  可以指定(最多5个)关键字,并将它们作为包装站点上的标签。

    l  依赖项部分支持插入符、波浪符、通配符、不等式和多重需求。

    l  你必须指定与包兼容的python版本。

    Poetry同样也会检测出你是否处在一个虚拟环境中并安装相应的软件包。这就是说,poetry可以在任何范围内被安装和使用。

    受益于Molinillo的启发,poetry也有一个完整的依赖项解析库。

    为什么使用它?

    在Python中,打包系统和依赖项管理是相当复杂的,对于新手来说很难理解。即使对于经验丰富的开发人员来说,在Python项目中创建所需的所有文件有时也很麻烦:setup.py, requirements.txt, setup.cfg, MANIFEST.in以及新添加的Pipfile。

    因此,我想要一个工具,它可以将所有东西限制在一个配置文件中:依赖项管理、打包和发布。

    它同样也从其他语言的工具中获得了灵感,比如composer(PHP)或cargo(Rust)。

    最后,没有可靠的工具可以妥当地解决Python中的依赖性,所以我开发了poetry,为了给Python社区带来一个详尽的依赖项解析器。 

    Pipenv呢?

    简而言之:我不喜欢它提供的命令行界面,也不喜欢它做的一些决定,我认为我们可以做一个更好、更直观的。下面就是pipenv里面一些我不喜欢的东西。

    依赖项解析

    依赖项解析是不稳定的,即使有解决办法但还是会失败。让我们举一个例子:

    image.png

    将会报出这样的错误:

    image.png

    然而Poetry就会给你带来各组正确的包:

    image.png

    结果是:

    image.png

    这要归功于Poetry中心的高效依赖项解析器。

    下面是以上命令的具体实现情况:

    oslo.utils (1.4.0) 依赖于:

    l  pbr (>=0.6,!=0.7,<1.0)

    l  Babel (>=1.3)

    l  six (>=1.9.0)

    l  iso8601 (>=0.1.9)

    l  oslo.i18n (>=1.3.0)

    l  netaddr (>=0.7.12)

    l  netifaces (>=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不兼容,所以poetry试图找到某个版本的oslo.i18n来满足pbr (>=0.6,!=0.7,<1.0)。

    通过分析oslo.i18n的发布版本,它会发现oslo.i18n==2.1.0需要pbr (>=0.11,<2.0)。到这时,因为没有了更多的冲突,其余部分的解决方法直截了当。

    安装命令

    当你为install命令指定一个包时,它将被添加为一个通配符依赖项。这意味着可以安装该软件包的任何版本,而这很有可能导致兼容性问题。

    而且,您必须显式地告诉它,当你安装新的软件包时,不要升级已经被锁定的包。这些应该是默认的。

    删除命令

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

    想要解决这个问题,你需要使用sync或clean。

    有限的范围

    还有,Pipfile只是requirements.txt的替代品。到最后,你仍需要按照与你在Pipfile文件中完全相同的依赖项声明来填充setup.py文件(或setup.cfg)。因此最终为了正确地设置项目,你还是需要管理一些配置文件。

    指令

    new

    这个命令将以创建适合大多数项目的目录结构的方式来启动你的新Python项目。

    image.png

    将创建一个如下的文件夹:

    image.png

    如果您想要重命名文件夹,您可以通过输入--name选项来实现:

    init

    这个命令提示你提供关于包的基本信息,这些将帮助你交互式的创建一个pyproject.toml文件。

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

    image.png

    选项

    --name:包的名称。

    --description:包的描述。

    --author: 包的作者。

    --dependency:包需要有一个版本约束。应该按照下面格式foo:1.0.0。

    --dev-dependency:开发需求,更多请参阅--require。

    Install

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

    image.png

    如果当前目录中有pyproject.lock文件,它将使用来自那里的指定版本。这确保每个使用库的人都能得到相同版本的依赖项。

    如果没有pyproject.lock文件,Poetry将在依赖项解析后创建一个。

    您可以指定no-dev选项来禁止安装开发依赖项。

    image.png

    您还可以通过传递--E|--extras附加选项来指定您想要安装的附加功能(请参阅附加信息以获得更多信息)

    image.png

    选项

    --no-dev:不要安装开发依赖项。

    -E|--extras:特性安装(允许多值)。

    Update

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

    image.png

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

    如果你只是想更新某些软件包,而不是全部,你可以将它们列出如下:

    image.png

    选项

    --dry-run:输出操作,但不会执行任何操作(隐式启用--verbose)。

    Add

    add命令向pyproject.toml中添加所需的软件包并安装它们。

    如果你没有指定一个版本约束,那么poetry将根据可用的包版本选择一个合适的版本。

    image.png

    选项

    --D|dev:添加包作为开发依赖项。

    --optional:添加作为可选的依赖项。

    --dry-run:输出操作,但不会执行任何操作(隐式启用--verbose)。

    Remove

    remove命令会从当前安装的包列表中删除一个包。

    image.png

    选项

    --D|dev:从开发依赖项中删除一个包。

    --dry-run:输出操作,但不会执行任何操作(隐式启用--verbose)。

    Show

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

    image.png

    如果你想要查看某个包的详细信息,你可以把包的名称作为参数传递。

    image.png

    选项

    --tree:树形展示依赖项。

    -l|--latest:展示最新版本。

    -o|--outdated:显示最新版本,但只针对过时的软件包。

    Build

    build命令会构建源和wheels档案。

    image.png

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

    选项

    -F|--format:将格式限制为wheel或sdist。

    Publish

    这个命令构建(如果还没有构建)并将包发布到远程存储库。

    如果这是第一次提交,它会自动注册这个包。

    image.png

    选项

    -r|--repository:将包注册到(默认:pypi)的存储库。它应该与配置命令设置的存储库名称相匹配。

    --username (-u):访问存储库的用户名。

    --password (-p):访问存储库的密码。

    Config

    config命令允许你编辑poetry的配置和存储库。

    image.png

    用法

    image.png

    setting-key是一个配置选项名,setting-value1则是一个配置值。

    修改存储库

    除了修改配置部分之外,config命令还支持对存储库部分进行更改,方法如下:

    image.png

    这会把存储库foo指定的url地址设置为https://foo.bar/simple/.。

    你也可以很轻松的将凭据存储到特定的存储库中:

    image.png

    如果你没有指定密码,会提示你必须指定。

    选项

    --unset:删除由setting-key命名的配置元素。

    --list:显示当前配置变量的列表。

    Search

    这个命令会在远程索引上搜索包。

    image.png

    选项

    -N|--only-name:只在名字中搜索。

    Lock

    这个命令会锁定(而且不安装)在pyproject.toml中指定的依赖项。

    pyproject.toml文件

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

    名字

    包的名字。必须

    版本

    包的版本。必须

    这里应该遵循语义版本控制。然而它不会被强制执行,你可以自由地遵循其他规范。

    描述

    对包的简短描述。必须

    许可证

    包的许可证。

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

    l  Apache-2.0

    l  BSD-2-Clause

    l  BSD-3-Clause

    l  BSD-4-Clause

    l  GPL-2.0

    l  GPL-2.0+

    l  GPL-3.0

    l  GPL-3.0+

    l  LGPL-2.1

    l  LGPL-2.1+

    l  LGPL-3.0

    l  LGPL-3.0+

    l  MIT

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

    作者

    这个包的作者。这是一个作者列表,应该包含至少一个作者。

    作者必须以名字 <邮箱地址>的形式出现。

    自述

    包的自述文件。必须

    文件可以是README.rst或README.md。

    主页

    一个到项目网站的URL地址。可选

    存储库

    一个到项目存储库的URL地址。可选

    文档

    一个指向项目文档的URL地址。可选

    关键字

    与包相关的关键字列表(最多5个)。可选

    应用和排除

    这是一个在最终包中会被应用的模式列表。

    为了更好地打包,你可以显式地指定poetry应该忽略或应用的一组globs。在排除字段中指定的globs会标识出一组文件,而这些文件在构建包时不会被包含在内。

    如果一个包应用了VCS,那么排除字段将被写入到VCS的忽略文件(例如,git中的gitignore)。

    image.png

    image.png

    依赖项和开发依赖项

    在默认配置情况下,Poetry会去寻找PyPi上的依赖关系。在这时,只需要提供名称和版本的字符串。

    image.png

    如果想使用私有存储库,你可以把它添加到pyproject.toml文件,如下所示:

    image.png

    请注意,必须要声明与你的包兼容的python版本:

    image.png

    插入符号需求

    插入符号需求允许对指定版本进行语义版本兼容性的更新。如果新版本号没有修改主要的、次要的、补丁组中最左边的数字,则会被允许更新。在这种情况下,如果我们运行poetry update requests,而且如果它是可用的,那么poetry将会更新到版本2.14.0,但是不会更新到3.0.0。如果我们把版本字符串指定为^0.1.13,那么诗歌就会更新到0.1.14,而不是0.2.0。一般认为0.0.x不会与其他任何版本兼容。

    下面是一些关于插入符号需求的例子,以及它们可以使用的版本:

    image.png

    波浪符需求

    波浪符需求会指定一个具有更新功能的最小版本。如果你指定了一个主要的、次要的和补丁的版本,或者只是一个主要的和次要的版本,那么只允许进行补丁级别的更改。如果您只指定一个主要版本,那么就允许进行次要的和补丁级别的更改。

    ~1.2.3是一个波浪符需求的例子。

    image.png

    通配符需求

    通配符需求会允许使用任意已被通配符定位的版本。

    *, 1.*和1.2.*是通配符需求的示例。

    不等式需求

    不等式需求允许手动指定依赖的版本范围或一个确切的版本。

    下面是不等式需求的一些例子:

    image.png

    多重需求

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

    git的依赖

    为了依赖一个位于git存储库中的库,你只需要指定一个带有git键的存储库的位置:

    image.png

    由于我们没有指定任何其他信息,所以Poetry假设我们打算使用主分支上的最新提交来构建我们的项目。您可以将git键与rev、tag或branch键组合在一起,用来指定其他东西。这里有个例子,说明您想要使用一个名为next的分支上最新的提交:

    image.png

    Python限制的依赖

    您还可以指定只针对特定的Python版本安装的依赖项:

    image.png

    image.png

    脚本

    本节描述在安装包时将要安装的脚本或可执行文件

    image.png

    在安装了一个带有上述toml的包之后,poetry将在命令行中成为一个通用命令,它将等同于在poetry包中执行console.run命令。

    附加项

    Poetry通过额外的表达式来支持附加项:

    l  可选的依赖项,它可以增强包的功能,但不是必需安装的;

    l  集群的可选依赖项。

    image.png

    在安装包时,您可以通过使用-E|--extras附加选项来指定获取额外功能:

    image.png

    插件

    Poetry支持任何插件,它们的工作原理类似于setuptools的入口点。为了匹配setuptools文档中的示例,您需要使用以下命令:

    image.png

    英文原文:https://github.com/sdispater/poetry 
  • 相关阅读:
    jchdl
    jchdl
    UVa 11134 (区间上的贪心) Fabled Rooks
    UVa (二分) 11627 Slalom
    POJ 1037 (计数 + DP) 一个美妙的栅栏
    HDU 3448 Bag Problem
    HDu 3449 (有依赖的01背包) Consumer
    POJ 1456 (贪心+并查集) Supermarket
    POJ 2236 (简单并查集) Wireless Network
    POJ 1703 Find them, Catch them
  • 原文地址:https://www.cnblogs.com/hellohorld/p/10742469.html
Copyright © 2020-2023  润新知