Python依赖管理及打包工具Poetry使用规范

目录
  • 啥是依赖规范
    • 版本约束
      • ^ 约束
      • ~ 约束
      • * 约束
      • 比较符
    • git 依赖
    • 路径依赖
    • url 依赖
    • Python 限制依赖项
      • 多个限制
    • 使用环境限制
    • 扩展依赖规范语法

啥是依赖规范

可以以各种形式指定项目的依赖项,取决于依赖项的类型以及安装项目可能需要的可选约束

版本约束

^ 约束

编写规范 允许的版本范围
^1.2.3 >=1.2.3 <2.0.0
^1.2 >=1.2.0 <2.0.0
^1 >=1.0.0 <2.0.0
^0.2.3 >=0.2.3 <0.3.0
^0.0.3 >=0.0.3 <0.0.4
^0.0 >=0.0.0 <0.1.0
^0 >=0.0.0 <1.0.0
  • 当最左边的数字为非 0,则以左一数字为主版本号,比如:^2.13.0,可以取 2.14.0,但不能取 3.0.0,因为主版本号已经变了
  • 如果左一的数字为 0,则以左二的数字为主版本号,比如:^0.1.0  可以取 0.1.1、0.1.19,但不能取 0.2.0,因为主版本号已经变了

~ 约束

编写规范 允许的版本范围
~1.2.3 >=1.2.3 <1.3.0
~1.2 >=1.2.0 <1.3.0
~1 >=1.0.0 <2.0.0

和上面的 ^ 差不多,不过这个是次要版本,以第二个数字为基准

* 约束

有点像万能匹配符,写在哪里都可以

编写规范 允许的版本范围
* >=0.0.0
1.* >=1.0.0 <2.0.0
1.2.* >=1.2.0 <1.3.0

比较符

就常规的>、< 符号了

>= 1.2.0
> 1
< 2
!= 1.2.3

确定的版本号或范围

>= 1.2,< 1.5

git 依赖

可以指定依赖项的 git 仓库地址

[tool.poetry.dependencies]
requests = { git = "https://github.com/requests/requests.git" }

默认会拉 git 仓库的 master 分支

也可以指定 branch、commit hash、tag

[tool.poetry.dependencies]# Get the latest revision on the branch named "next"requests = { git = "https://github.com/kennethreitz/requests.git", branch = "next" }# Get a revision by its commit hashflask = { git = "https://github.com/pallets/flask.git", rev = "38eb5d3b" }# Get a revision by its tagnumpy = { git = "https://github.com/numpy/numpy.git", tag = "v0.13.2" }

路径依赖

如果依赖项位于本地目录,可以用 path

[tool.poetry.dependencies]
# directory
my-package = { path = "../my-package/", develop = false }

# file
my-package = { path = "../my-package/dist/my-package-0.1.0.tar.gz" }

url 依赖

如果依赖远程仓库的文件,可以用 url

[tool.poetry.dependencies]
# directory
my-package = { url = "https://example.com/my-package-0.1.0.tar.gz" }

可以通过 poetry add 来添加 url

poetry add https://example.com/my-package-0.1.0.tar.gz

Python 限制依赖项

指定仅应该以特定 Python 版本安装依赖项

[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", python = "~2.7" }
[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", python = "~2.7 || ^3.2" }

多个限制

假设依赖包

版本小于等于 1.9 的时候,只能和 Python 2.7 到 Python 2.9 版本兼容

版本大于 2.0 的时候,只能和 Python 3.4 + 版本兼容

[tool.poetry.dependencies]
foo = [
    {version = "<=1.9", python = "^2.7"},
    {version = "^2.0", python = "^3.4"}
]

使用环境限制

感觉比较少用,暂时不展开详解

[tool.poetry.dependencies]
pathlib2 = { version = "^2.2", markers = "python_version ~= '2.7' or sys_platform == 'win32'" }

markers 官方文档:https://www.python.org/dev/peps/pep-0508/#environment-markers

扩展依赖规范语法

当某个依赖项需要添加很多属性的时候,可读性就很差,如下

[tool.poetry.dev-dependencies]
black = {version = "19.10b0", allow-prereleases = true, python = "^3.6", markers = "platform_python_implementation == 'CPython'"}

使用新的语法格式

[tool.poetry.dev-dependencies.black]
version = "19.10b0"
allow-prereleases = true
python = "^3.6"
markers = "platform_python_implementation == 'CPython'"

依赖项的约束完全一样,只不过变成一行一个约束属性,可读性更强

以上就是Python依赖管理及打包工具Poetry依赖规范的详细内容,更多关于Python工具poetry依赖规范的资料请关注我们其它相关文章!

(0)

相关推荐

  • python的依赖管理的实现

    主流开发语言的包管理工具一般都是支持依赖管理的,比如PHP的composer.Java的mvn. 对于python来说又该如何管理依赖呢? pip基本用法 python还不错,它提供了pip命令来安装依赖,同时pip会自动安装间接依赖,的确是很方便的. 安装依赖的命令是pip,举个栗子: pip install requests 然后可以看到一些打印信息: Looking in indexes: http://mirrors.aliyun.com/pypi/simple Requirement

  • 使用Python项目生成所有依赖包的清单方式

    1.安装所需工具 pip install pipreqs 2.进入到python项目主目录 pipreqs ./ 3.完成上面命令会生成requirements.txt 4.sudo pip install -r requirements.txt即可 补充知识:解决Python开发过程中依赖库打包问题的方法 在Python开发的过程中,经常会遇到各种各样的小问题,比如在一台计算机上调试好的程序,迁移到另外一台机子上后往往会应为工程项目依赖库的缺失而造成错误. 除了一遍又一遍对着被抛出错误去重新i

  • Python依赖包整体迁移方法详解

    1.新建site-packages目录,进入到site-packages目录下: 2.在site-packages目录下执行pip freeze >requirements.txt: 3.查看requirements.txt,可以看到当前机器的python所有依赖包已生成列表 ​ 4.在当前目录下执行pip download -rrequirements.txt,可以看到pip开始下载依赖包列表中的所有依赖包 ​ 5.等待下载完成后,可以看到当前目录下已经有了依赖包文件 ​ 6.将site-pa

  • Python依赖管理及打包工具Poetry使用规范

    目录 啥是依赖规范 版本约束 ^ 约束 ~ 约束 * 约束 比较符 git 依赖 路径依赖 url 依赖 Python 限制依赖项 多个限制 使用环境限制 扩展依赖规范语法 啥是依赖规范 可以以各种形式指定项目的依赖项,取决于依赖项的类型以及安装项目可能需要的可选约束 版本约束 ^ 约束 编写规范 允许的版本范围 ^1.2.3 >=1.2.3 <2.0.0 ^1.2 >=1.2.0 <2.0.0 ^1 >=1.0.0 <2.0.0 ^0.2.3 >=0.2.3 &

  • 详解webpack模块化管理和打包工具

    本篇文章主要介绍了详解webpack模块化管理和打包工具,小编觉得挺不错的,现在分享给大家,也给大家做个参考.一起跟随小编过来看看吧 Webpack简介 webpack是当下最热门的前端资源模块化管理和打包工具. 它可以将许多松散的模块按照依赖和规则打包成符合生产环境部署的前端资源.还可以将按需加载的模块进行代码分隔,等到实际 需要的时候再异步加载.通过 loader  的转换,任何形式的资源都可以视作模块,比如 CommonJs 模块. AMD 模块. ES6 模块.CSS.图片. JSON.

  • 浅析python打包工具distutils、setuptools

    python中安装包的方式有很多种: 源码包:python setup.py install 在线安装:pip install 包名(linux) / easy_install 包名(window) python包在开发中十分常见,一般的使用套路是所有的功能做一个python模块包,打包模块,然后发布,安装使用.打包和安装包就是最常见的工作.学习中遇到distutils和setuptools两种打包的工具,学习之后做笔记记录. distutils distutils 是 python 标准库的一

  • Python 依赖库太多了该如何管理

    在 Python 的项目中,如何管理所用的全部依赖库呢?最主流的做法是维护一份"requirements.txt",记录下依赖库的名字及其版本号. 那么,如何来生成这份文件呢?在上篇文章<由浅入深:Python 中如何实现自动导入缺失的库?>中,我提到了一种常规的方法: pip freeze > requirements . txt 这种方法用起来方便,但有几点不足: 它搜索依赖库的范围是全局环境,因此会把项目之外的库加入进来,造成冗余(一般是在虚拟环境中使用,但还是

  • Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法

    windows系统下安装Pyinstaller cmd下输入指令 pip install PyInstaller Pyinstaller的使用 进入需要打包的目录下,执行打包命令 Pyinstaller [opts] yourprogram.py 示范 pyinstaller -F -W helloworld.py opts可选的参数 参数 含义 -F -onefile,打包成一个exe文件 -D -onefile,创建一个目录,包含exe文件,但会依赖很多文件(默认选项) -c -consol

  • Python包管理工具pip的15 个使用小技巧

    认识pip 众所周知,pip可以对python的第三方库进行安装.更新.卸载等操作,十分方便. pip的全称:package installer for python,也就是Python包管理工具. 可能有些人用了很久pip,但还不清楚包管理工具是个啥. 我们先从Python这门语言说起,Python之所以受欢迎不光是因为它简单易学,更重要的是它有成千上万的宝藏库. 这些库相当于是已经集成好的工具,只要安装就能在Python里使用.它们可以处理各式各样的问题,无需你再造轮子,而且随着社区的不断更

  • 如何使用PHP依赖管理工具Composer

    前言 别再到处搜PHP类扩展包了,对于现代语言而言,包管理器基本上是标配.Java 有 Maven,Python 有 pip,Ruby 有 gem,Nodejs 有 npm.PHP 的则是 PEAR,不过 PEAR 坑不少: 依赖处理容易出问题 配置非常复杂 难用的命令行接口 好在我们有 Composer,PHP依赖管理的利器.它是开源的,使用起来也很简单,提交自己的包也很容易. 举个例子,平时我们开始的时候如果不是用框架,想要一个验证码,就要先去Gihutb或者其他地方找一个验证码类,然后在项

  • Python包管理工具pip用法详解

    pip提供我们各色各样的软件(第三方库),而这些第三方库又可以给我们实现各种各样不同的功能,科学计算.画图.操作文件.聊天…… 我们可以通过Cmd终端.Pycharm.Jupyter三种平台使用pip安装这些第三方库. 官方Python 第三方库软件包地址:PyPI · Python 包索引 Anaconda,Conda,Pip的关系 Anaconda是一个python发行版.软件发行版是在系统上提前编译和配置好的软件包集合, 装好了后就可以直接用. Conda是一个包管理器.包管理器是自动化软

  • Python cx_freeze打包工具处理问题思路及解决办法

    以下是在使用cx_freeze过程中遇到的问题及解决办法(Win7) 1.问题描述:运行exe,启动无数个主程序,导致系统无法使用 原因:在程序中使用了multiprocessing的包 解决办法:在主文件if __name__ == "__main__":后,添加multiprocessing.freeze_support(),一定要在添加在最开始处 2. 问题描述:运行后,提示在freeze_support中sys.stdout.flush处异常 原因:使用的PyQT作为界面,没有

随机推荐