技术分享|为什么Python开发人员应该使用Pipenv

2018-08-24 16:00:49

Pipenv是由Kenneth Reitz在一年多前创建的"面向开发者而生的Python开发工作流",它已经成为管理软件包依赖关系的?Python官方推荐资源。但是对于它解决了什么问题,以及它如何比使用piprequirements.txt文件的标准工作流更有用处,这两点仍然存在困惑。接下来,西安中软卓越的老师将为大家分享为什么Python开发人员应该使用Pipenv的相关内容

技术分享|为什么Python开发人员应该使用Pipenv.jpg

一、Python包安装简史

为了理解Pipenv所解决的问题,看一看Python包管理如何发展十分有用的。

让我们回到第一个Python版本,这时我们有了Python,但是没有干净的方法来安装软件包。

然后有了Easy Install,这是一个可以相对容易地安装其他Python包的软件包,但它也带来了一个问题:卸载不需要的包并不容易。

pip登场,绝大多数Python用户都熟悉它。pip可以让我们安装和卸载包。我们可以指定版本,运行pip freeze>requirements.txt来输出一个已安装包列表到一个文本文件,还可以用相同的文本文件配合pip install-r requirements.txt来安装一个应用程序需要的所有包。

但是pip并没有包含将软件包彼此隔离的方法。我们可能会开发使用相同库的不同版本的应用程序,因此我们需要一种方法来实现这一点。随之而来的是虚拟环境,它使我们能够为我们开发的每个应用程序创建一个小型的、隔离的环境。我们已经看到了许多管理虚拟环境的工具:virtualenvvenvvirtualenvwrapperpyenvpyenv-virtualenvpyenv-virtualenvwrapper等等。它们都可以很好地使用piprequirements.txt文件。

二、新方法:Pipenv

Pipenv旨在解决几个问题:

首先,需要pip库来安装包,外加一个用于创建虚拟环境的库,以及用于管理虚拟环境的库,再有与这些库相关的所有命令。这些都需要管理。Pipenv附带包管理和虚拟环境支持,因此你可以使用一个工具来安装、卸载、跟踪和记录依赖性,并创建、使用和组织你的虚拟环境。当你使用它启动一个项目时,如果你还没有使用虚拟环境的话,Pipenv将自动为该项目创建一个虚拟环境。

Pipenv通过放弃requirements.txt规范转而将其移动到一个名为Pip file的新文档中来完成这种依赖管理。当你使用Pipenv安装一个库时,项目的Pip file会自动更新安装细节,包括版本信息,还有可能的Git仓库位置、文件路径和其他信息。

其次,Pipenv希望能更容易地管理复杂的相互依赖关系。你的应用程序可能依赖于某个特定版本的库,而那个库可能依赖于另一个特定版本的库,这些依赖关系如海龟般堆叠起来。当你的应用程序使用的两个库有冲突的依赖关系时,你的情况会变得很艰难。Pipenv希望通过在一个名为Pipfile.lock的文件中跟踪应用程序相互依赖关系树来减轻这种痛苦。Pip file.lock还会验证生产中是否使用了正确版本的依赖关系。

另外,当多个开发人员在开发一个项目时,Pipenv很方便。通过pip工作流,凯西可能会安装一个库,并花两天时间使用该库实现一个新功能。当凯西提交更改时,他可能会忘记运行pipfreeze来更新requirements.txt文件。第二天,杰米拉取凯西的改变,测试就突然失败了。这样会花费好一会儿才能意识到问题是在requirements.txt文件中缺少相关库,而杰米尚未在虚拟环境中安装这些文件。

因为Pipenv会在安装时自动记录依赖性,如果杰米和凯西使用了PipenvPipfile会自动更新并包含在凯西的提交中。这样杰米和凯西就可以节省时间并更快地运送他们的产品。

最后,将Pipenv推荐给在你项目上工作的其他人,因为它使用标准化的方式来安装项目依赖项和开发和测试的需求。使用pip工作流和requirements.txt文件意味着你可能只有一个requirements.txt文件,或针对不同环境的多个requirements.txt文件。例如,你的同事可能不清楚他们是否应该在他们的笔记本电脑上运行项目时是运行dev.txt还是local.txt。当两个相似的requirements.txt文件彼此不同步时它也会造成混淆:local.txt是否过时了,还是真的应该与dev.txt不同?多个requirements.txt文件需要更多的上下文和文档,以使其他人能够按照预期正确安装依赖关系。这个工作流程有可能会混淆同时并增加你的维护负担。

使用Pipenv,它会生成Pipfile,通过为你管理对不同环境的依赖关系,可以避免这些问题。该命令将安装主项目依赖项:

 为什么Python开发人员应该使用Pipenv1.jpg

添加--dev标志将安装开发/测试的requirements.txt

 为什么Python开发人员应该使用Pipenv2.jpg

使用Pipenv还有其他好处:它具有更好的安全特性,以易于理解的格式绘制你的依赖关系,无缝处理.env文件,并且可以在一个文件中自动处理开发与生产环境的不同依赖关系。你可以在文档中阅读更多内容。

三、使用Pipenv

使用Pipenv的基础知识在官方Python包管理教程管理应用程序依赖关系部分中详细介绍。要安装Pipenv,使用pip

 为什么Python开发人员应该使用Pipenv3.jpg

要安装在项目中使用的包,请更改为项目的目录。然后安装一个包(我们将使用Django作为例子),运行:

 为什么Python开发人员应该使用Pipenv4.jpg

你会看到一些输出,表明Pipenv正在为你的项目创建一个Pipfile

如果你还没有使用虚拟环境,你还会看到Pipenv的一些输出,说明它正在为你创建一个虚拟环境。

然后,你将看到你在安装包时常看到的输出。

为了生成Pipfile.lock文件,运行:

 为什么Python开发人员应该使用Pipenv5.jpg

你也可以使用Pipenv运行Python脚本。运行名为hello.py的上层Python脚本:

 为什么Python开发人员应该使用Pipenv6.jpg

你将在控制台中看到预期结果。

启动一个shell,运行:

 为什么Python开发人员应该使用Pipenv7.jpg

如果你想将当前使用requirements.txt文件的项目转换为使用Pipenv,请安装Pipenv并运行:

 为什么Python开发人员应该使用Pipenv8.jpg

这将创建一个Pipfile并安装指定的requirements.txt。考虑一下升级你的项目!

作为一名开发人员,技术是立身的根本,是拴马桩的尊严;对于一个做教育机构,口碑如水是生命之源,是长盛不衰的根本。13年历经风雨依然昂首前行,未来的西安中软卓越同样会恪守初心,以技术立身,培养IT精英,捍卫教育本质。


本文由中软卓越(西安)汇集整理,转载请注明作者及出处。

如需学习java、UI设计、软件测试、Python、大数据、嵌入式、Linxu云计算,请点击咨询,加入我们让你的未来不再迷茫。

关于我们

【中软卓越】-中软国际旗下高端教育品牌,是中软国际有限公司投资的大型人才服务机构,是中软国际人才战略的核心组成部分之一,承担集团发展过程中人才储备和培养的任务;专注IT培训37年,国内高端IT培训品牌,教育部指定官方IT人才培训机构。专注java培训、UI设计培训、软件测试培训、Python培训、大数据培训、嵌入式培训、Linxu云计算培训等培训课程。217家合作院校,880家合作企业,真实项目实战,素质拓展,职业规划。零首付,100%保障就业,先就业,后付款。

最牛逼的毕业学员入职名企享受高薪就业。880家合作企业,年培育学员人数逾6000人,毕业学员就职于中软国际、百度、腾讯、阿里巴巴、IBM、华为科技、中兴通讯、软通动力等知名企业。

还有什么疑问?我们全面为你解答!为您提供一对一专人服务,请点击下方咨询

  • 卓越资讯
  • 猜你想看
  • 常见问题

    Java是一门面向对象编程语言,不仅吸收了C++语言的各种优点,还摒弃了C++里难以理解的多继承、指针等概念,因此Java语言具有功能强大和简单易用两个特征。[详细课程]

    软件开发是根据用户要求建造出软件系统或者系统中的软件部分的过程;软件开发是一项包括需求捕捉、需求分析、设计、实现和测试的系统工程。[详细课程]

    软件测试是在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。[详细课程]

    Python是一种面向对象的解释型计算机程序设计语言,语法简洁清晰,特色之一是强制用空白符作为语句缩进,它常被昵称为胶水语言,能够把用其他语言制作的各种模块。[详细课程]

    UI设计分为实体UI和虚拟UI,互联网说的UI设计是虚拟UI,一般是指对软件的人机交互、操作逻辑、界面美观的整体设计。[详细课程]

    大数据,又称巨量资料,指的是所涉及的数据资料量规模巨大到无法通过人脑甚至主流软件工具,在合理时间内达到撷取、管理、处理、并整理成为帮助企业经营决策更积极目的的资讯。[详细课程]

    云计算是一种按使用量付费的模式,这种模式提供可用的、便捷的、按需的网络访问, 进入可配置的计算资源共享池(资源包括网络,服务器,存储,应用软件,服务),这些资源能够被快速提供,只需投入很少的管理工作,或与服务供应商进行很少的交互。[详细课程]

    西安市长安北路8号高速大厦三楼

    电话:029-61876930