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

Poetry支持Python 2.7 和Python 3以上

安装

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

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

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

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

也可以使用pip来安装poetry。

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

升级 poetry

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

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

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

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

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

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

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

简介

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里面一些我不喜欢的东西。

依赖项解析

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

将会报出这样的错误:

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

结果是:

这要归功于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项目。

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

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

init

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

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

选项

--name:包的名称。

--description:包的描述。

--author: 包的作者。

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

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

Install

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

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

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

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

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

选项

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

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

Update

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

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

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

选项

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

Add

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

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

选项

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

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

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

Remove

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

选项

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

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

Show

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

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

选项

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

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

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

Build

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

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

选项

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

Publish

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

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

选项

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

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

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

Config

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

用法

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

修改存储库

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

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

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

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

选项

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

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

Search

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

选项

-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)。

依赖项和开发依赖项

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

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

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

插入符号需求

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

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

波浪符需求

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

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

通配符需求

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

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

不等式需求

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

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

多重需求

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

git的依赖

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

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

Python限制的依赖

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

脚本

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

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

附加项

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

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

l  集群的可选依赖项。

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

插件

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

英文原文:https://github.com/sdispater/poetry

转载于:https://www.cnblogs.com/hellohorld/p/10742469.html

Python web 项目的依赖管理工具相关推荐

  1. 安装Objective-C的依赖管理工具CocoaPods

    CocoaPods--Swift 与 Objective-C 项目的依赖管理工具,iOS 开发者的必备技能.如果你没有任何 CocoaPods 经历,那么这篇短文就是为你而写.我们将会学到什么是 Co ...

  2. Pipenv(项目虚拟环境与依赖管理工具)的简单使用教程

    一.Pipenv的作用 Pipenv是python的依赖管理工具,可以看做是pip与virtualenv的结合体.Pipenv会自动帮助你管理虚拟环境和依赖文件,并且提供一系列命令和选项来帮助你实现各 ...

  3. Golang依赖管理工具:glide从入门到精通使用

    2019独角兽企业重金招聘Python工程师标准>>> 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰的Maven和Gradle. G ...

  4. python web项目(django+Layui+mysql)

    python web项目(django--+Layui+mysql) 1.结果图 2目录结构 3.开干 4.总结 为了完成期末作业,做的一个学生成绩管理系统,采用django+Layui+mysql5 ...

  5. go build不从本地gopath获取_跟我一起学习go语言,包依赖管理工具go mod

    Go Module是Go会在1.12中正式推出的包管理机制. Go mod 简介 Golang一直存在一个被人诟病的问题是缺少一个官方的包依赖管理工具.从我个人的角度上来看存在两个问题: GOPATH ...

  6. linux go vendor目录,Go 包依赖管理工具 —— govendor

    govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...

  7. PHP依赖管理工具Composer配置安装及基本使用

    一.介绍 Composer是PHP中的一个依赖管理工具. 它可以让你声明自己项目所依赖的库,然后它将会在项目中为你安装这些库.就像是node的npm和ruby的bundler差不多. 二.window ...

  8. go之官方依赖管理工具dep安装和使用

    前言 大家都知道go没有一个自己的包管理平台.社区里go的第三方包托管在各个git托管平台.需要用到包时通过go get 命令工具安装,但这个工具没有版本描述性文件,在go的世界里没有"pa ...

  9. GoLand2021使用包依赖管理工具 Go Modules

    GoLand2021使用包依赖管理工具 文章目录 GoLand2021使用包依赖管理工具 前言 一.创建空项目 二.配置项目的GOPATH 1.设置GOPATH目录 三.使用 Go Modules 1 ...

最新文章

  1. 2009全国公共英语五级(PETS-5)考试大纲概述
  2. 在IntentService中使用Toast与在Service中使用Toast的异同,intentservicetoast
  3. 看人装X,我就来气,开启极限装X模式
  4. 自定义ChannelHandler 的添加过程
  5. AngualrJS之服务器端通信
  6. 安卓抓包软件_你们要的抓包神器!以及抓包原理
  7. Entity Framework加载相关实体——Eager Loading
  8. Java中的引用数据类型-BigDecimal
  9. Cookie和Session的知识
  10. 算法7-16:弗洛伊德最短路径算法
  11. JSP基础之九九乘法表(利用JSP脚本段制作一张九九乘法表)
  12. 验证计算机名出现一般性网络错误,一般性网络错误请检查网络文档
  13. 函数的连续性与间断点
  14. 写给女朋友的java_Java会说情话的女朋友
  15. 记一次bug,由于前端参数不对导致的bug,no int/Int-argument constructor/factory method to deserialize from Number valu
  16. c语言编辑mapgis花纹库,MapGIS绘图步骤、图形处理—输入编辑等技巧
  17. 免签支付接口和三方支付接口有什么不同?
  18. Arduino 四位数码管控制
  19. 移动短信网关接入必须的几个参数
  20. c语言sln是什么文件夹,Visual Studio 打开 sln 文件时出现保存 devenv.sln 问题

热门文章

  1. 【Network Security!】5次Shift漏洞和PE系统
  2. 查看自己的Android studio 版本
  3. 718保时捷spyder_我要买保时捷718 Spyder的原因:新手也可以玩手动
  4. java object转list_这份Java开发规范,让你100%受益!
  5. ajax往CJJTable传值,jQuery+ajax怎么样实现动态数据分页
  6. html实现全屏效果原理,HTML5 实现全屏效果
  7. 什么是网络推广带你了解新上线的网站该如何提升关键词排名?
  8. 网站文章要求图文并茂,图片要怎样做好优化工作呢?
  9. yii2 获取同一个账号登录的所有session_前端登录方案?这一篇就够了
  10. Linux确定命令的执行时长,Linux 历史命令显示执行时间