Python web 项目的依赖管理工具
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 项目的依赖管理工具相关推荐
- 安装Objective-C的依赖管理工具CocoaPods
CocoaPods--Swift 与 Objective-C 项目的依赖管理工具,iOS 开发者的必备技能.如果你没有任何 CocoaPods 经历,那么这篇短文就是为你而写.我们将会学到什么是 Co ...
- Pipenv(项目虚拟环境与依赖管理工具)的简单使用教程
一.Pipenv的作用 Pipenv是python的依赖管理工具,可以看做是pip与virtualenv的结合体.Pipenv会自动帮助你管理虚拟环境和依赖文件,并且提供一系列命令和选项来帮助你实现各 ...
- Golang依赖管理工具:glide从入门到精通使用
2019独角兽企业重金招聘Python工程师标准>>> 介绍 不论是开发Java还是你正在学习的Golang,都会遇到依赖管理问题.Java有牛逼轰轰的Maven和Gradle. G ...
- python web项目(django+Layui+mysql)
python web项目(django--+Layui+mysql) 1.结果图 2目录结构 3.开干 4.总结 为了完成期末作业,做的一个学生成绩管理系统,采用django+Layui+mysql5 ...
- go build不从本地gopath获取_跟我一起学习go语言,包依赖管理工具go mod
Go Module是Go会在1.12中正式推出的包管理机制. Go mod 简介 Golang一直存在一个被人诟病的问题是缺少一个官方的包依赖管理工具.从我个人的角度上来看存在两个问题: GOPATH ...
- linux go vendor目录,Go 包依赖管理工具 —— govendor
govendor 是一个基于 vendor 机制实现的 Go 包依赖管理命令行工具.与原生 vendor 无侵入性融合,也支持从其他依赖管理工具迁移,可以很方便的实现同一个包在不同项目中不同版本.以及 ...
- PHP依赖管理工具Composer配置安装及基本使用
一.介绍 Composer是PHP中的一个依赖管理工具. 它可以让你声明自己项目所依赖的库,然后它将会在项目中为你安装这些库.就像是node的npm和ruby的bundler差不多. 二.window ...
- go之官方依赖管理工具dep安装和使用
前言 大家都知道go没有一个自己的包管理平台.社区里go的第三方包托管在各个git托管平台.需要用到包时通过go get 命令工具安装,但这个工具没有版本描述性文件,在go的世界里没有"pa ...
- GoLand2021使用包依赖管理工具 Go Modules
GoLand2021使用包依赖管理工具 文章目录 GoLand2021使用包依赖管理工具 前言 一.创建空项目 二.配置项目的GOPATH 1.设置GOPATH目录 三.使用 Go Modules 1 ...
最新文章
- 2009全国公共英语五级(PETS-5)考试大纲概述
- 在IntentService中使用Toast与在Service中使用Toast的异同,intentservicetoast
- 看人装X,我就来气,开启极限装X模式
- 自定义ChannelHandler 的添加过程
- AngualrJS之服务器端通信
- 安卓抓包软件_你们要的抓包神器!以及抓包原理
- Entity Framework加载相关实体——Eager Loading
- Java中的引用数据类型-BigDecimal
- Cookie和Session的知识
- 算法7-16:弗洛伊德最短路径算法
- JSP基础之九九乘法表(利用JSP脚本段制作一张九九乘法表)
- 验证计算机名出现一般性网络错误,一般性网络错误请检查网络文档
- 函数的连续性与间断点
- 写给女朋友的java_Java会说情话的女朋友
- 记一次bug,由于前端参数不对导致的bug,no int/Int-argument constructor/factory method to deserialize from Number valu
- c语言编辑mapgis花纹库,MapGIS绘图步骤、图形处理—输入编辑等技巧
- 免签支付接口和三方支付接口有什么不同?
- Arduino 四位数码管控制
- 移动短信网关接入必须的几个参数
- c语言sln是什么文件夹,Visual Studio 打开 sln 文件时出现保存 devenv.sln 问题
热门文章
- 【Network Security!】5次Shift漏洞和PE系统
- 查看自己的Android studio 版本
- 718保时捷spyder_我要买保时捷718 Spyder的原因:新手也可以玩手动
- java object转list_这份Java开发规范,让你100%受益!
- ajax往CJJTable传值,jQuery+ajax怎么样实现动态数据分页
- html实现全屏效果原理,HTML5 实现全屏效果
- 什么是网络推广带你了解新上线的网站该如何提升关键词排名?
- 网站文章要求图文并茂,图片要怎样做好优化工作呢?
- yii2 获取同一个账号登录的所有session_前端登录方案?这一篇就够了
- Linux确定命令的执行时长,Linux 历史命令显示执行时间