天天看点

poetry项目打包工具详细介绍及演示Python虚拟环境和依赖管理工具-poetrypoetry安装包

Python虚拟环境和依赖管理工具-poetry

1. poetry 是什么

Poetry 和 Pipenv 类似,是一个 Python 虚拟环境和项目打包工具,比如打包和发布。它可以让你用 Poetry 来同时管理 Python 库和虚拟环境。
           
  • 主页:https://poetry.eustace.io/
  • 源码:https://github.com/sdispater/poetry
  • 文档:https://poetry.eustace.io/docs

2. poetry怎么安装

安装poetry的官方命令
$ curl -sSL https://raw.githubusercontent.com/sdispater/poetry/master/get-poetry.py | python

执行效果:
           
poetry项目打包工具详细介绍及演示Python虚拟环境和依赖管理工具-poetrypoetry安装包
解决方法:下载get-poetry.py脚本手动安装
脚本地址:https://github.com/python-poetry/poetry/blob/master/get-poetry.py

本地执行该脚本,然后在终端执行 poetry --version 查看是否安装成功
执行效果:
           
poetry项目打包工具详细介绍及演示Python虚拟环境和依赖管理工具-poetrypoetry安装包

Poetry 怎么用

Python包管理之poetry基本使用 - 知乎 (zhihu.com)

两种情况: 1. 在一个已有的项目里面使用Poetry 2. 创建一个新的Python项目

第一种情况下,需要创建一个pyproject.toml文件
poetry init
根据提示输入项目信息
执行效果:
           
poetry项目打包工具详细介绍及演示Python虚拟环境和依赖管理工具-poetrypoetry安装包

注:根据它的提示输入你的项目信息,不确定的内容就按下 Enter 使用默认值,后续也可以手动更新。指定依赖的环节可以跳过,手动安装会更高效一点。

第二种情况下,创建一个新的 Python 项目,使用 poetry new <文件夹名称> 命令
poetry new <文件夹名称>,例如poetry new demo
执行效果:
           
poetry项目打包工具详细介绍及演示Python虚拟环境和依赖管理工具-poetrypoetry安装包

poetry创建虚拟环境

poetry install (会读取并安装pyproject.toml中的依赖,同时会创建虚拟环境,把这些依赖装在虚拟环境里)
poetry env use <python.exe路径>
poetry shell (激活虚拟环境)
poetry env info (查看虚拟环境信息)
poetry env list (查看虚拟环境列表)
           

poetry安装包

poetry add <包名>
例如 poetry add flask --dev (--dev可以指定为开发依赖)
           

poetry 查看包

poetry 可以通过一行命令查看所有安装的依赖
poetry show

也可以通过一行命令查看依赖关系
poetry show --tree

还可以查看可以更新的依赖
poetry show --outdated

想要一次性更新所有的依赖
poetry update

只更新某个依赖
poetry update <包名>
           

poetry 卸载包

还支持更多操作

例如:在 pyproject.toml 配置文件中添加国内镜像源地址配置,提高下载速度

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8fj1qJfY-1626507430354)(C:\Users\Administrator\Desktop\风控建模与规则挖掘\镜像源.png)]

入门版 :https://zhuanlan.zhihu.com/p/81025311

基本版:Python包管理之poetry基本使用 - 知乎 (zhihu.com)

优点

  • 使用标准的 pyproject.toml 文件,不用写多个配置文件
  • 同时支持管理 Python 程序和 Python 库
  • 更符合直觉的默认设计,比如不会随便更新锁定版本的依赖
  • 干净简洁的命令行输出,没有星星和蛋糕
  • 安装包的时候,使用 upper bound 版本限定,而不是 Pipenv 默认的通配符
  • 卸载包的时候,直接卸载孤立的子依赖,不需要像 Pipenv 那样需要再执行 pipenv clean

缺点

  • 引入新的 pyproject.toml 标准,旧项目需要一点迁移成本和学习成本
  • 会有一些潜在的 bug
  • 解析依赖的过程偶尔会久一点
  • 对虚拟环境的管理控制有些弱,没有 Pipenv 那样的删除虚拟环境和清空依赖的操作
  • 缺少一个稳定的维护团队,有大量 issue 和 PR 等待处理,但情况在逐渐好转

当然,你还是可以选择继续使用 virtualenv/venv 和 pip 这些基础工具,直到有一个完美的解决方案出现。或者,也可以选择试试新东西,然后尝试改进它,让完美的解决方案早一点出现。

学习poetry历程

  1. 首先要知道的的是依赖的概念,简单的说就是一个项目或者一个程序要运行所依赖某些包/库(pandas, numpy, scikit-learn)等等。
  2. 依赖管理工具(maven, npm, pip)等。python包基本都可以通过pip install 安装, pip uninstall 卸载
  3. 虚拟环境,Python和Java、JS这些编程语言本质上存在差异导致,Java、JS是以项目进行隔离,每当开发一个项目,依赖包都是安装在项目工程路径下。每个工程之间是隔离的,这样,即便是不同工程用到同一个包的不同版本,它们之间也不会产生冲突。
    poetry项目打包工具详细介绍及演示Python虚拟环境和依赖管理工具-poetrypoetry安装包

但是,Python则不同,在Python中无法通过工程对依赖包进行隔离。当我们之间使用

pip

安装第三方包时,所有的依赖都会安装到安装目录下的

site-packages

poetry项目打包工具详细介绍及演示Python虚拟环境和依赖管理工具-poetrypoetry安装包

不同的依赖安装到不同的虚拟环境中,然后不同的项目可以基于不同的虚拟环境运行。

  1. 发现不足:针对Python依赖管理和虚拟环境经常会用到2个工具:

    pip

    virtualenv

    • 需要同时依赖2款管理工具
    • 不能动态更新requirements.txt
  2. pipenv试图解决这个问题。
    pipenv可以看成是pip+virtualenv两款工具的合体,它集合了pip的依赖包管理和virtualenv虚拟环境管理于一身。另外,在依赖包记录方面使用Pipfile替代原来的requirements.txt。而且,它能够自动记录并更新记录文件,这样就不再需要手动执行命令来更新requirements.txt
               
  3. 但是,它也存在不足
    1.Lock速度缓慢
     2.强行更新不相干依赖
     3.依赖处理效果较差
    一个例子: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
    即使你的项目还可以用2.0.0,0.6。pipenv只会简单粗暴的报错,不会灵活处理这个问题。
               
  4. 发现了主角poetry的存在
    集成了pipenv的优势,同时还可以用于python工程打包和发布。poetry通过配置文件pyproject.toml来完成依赖管理、环境配置、基本信息配置等功能。相当于把Python项目中的Pipfile、setup.py、setup.cfg、requirements.txt、MANIFEST.in融合到一起。
    
    poetry相比于pipenv具有很多明显优势的功能:
    
     1.更强大的依赖处理功能
     2.易于打包和构建Python工程
     3.易于发布工具包
     4.结构化展示依赖关系
               
    还是上面那个问题,如果是poetry安装的话可能会帮你安装一个最新版,或者某个可用的版本。

打包和发布python工程

如果需要把我们的工程部署到生产环境服务器上,这时候就需要用到Python的打包和安装功能

$ poetry build

Building poetry (1.0.0)
- Building sdist
- Built poetry-1.0.0.tar.gz

- Building wheel
- Built poetry-1.0.0-py2.py3-none-any.whl
           

把工程发布到PyPI仓库, 在poetry中,只需要简单配置一下

pyproject.toml

,就可以实现一行命令发布工具包

$ poetry publish

Publishing poetry (1.0.0) to PyPI

  - Uploading poetry-1.0.0.tar.gz 100%
  - Uploading poetry-1.0.0-py2.py3-none-any.whl 58%
           

把工程发布到PyPI仓库, 在poetry中,只需要简单配置一下

pyproject.toml

,就可以实现一行命令发布工具包

$ poetry publish

Publishing poetry (1.0.0) to PyPI

  - Uploading poetry-1.0.0.tar.gz 100%
  - Uploading poetry-1.0.0-py2.py3-none-any.whl 58%
           

原创不易,资源整合不易,点赞也不易!!

我坚持原创,坚持资源整合,你坚持点赞!!

如果你发现了问题,欢迎留言指正 ❤️ ❤️