0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Python开发的Pipenv能解决什么问题

我快闭嘴 作者:工程师李察 2018-10-06 14:27 次阅读

只用了一年, Pipenv 就变成了管理软件包依赖关系的 Python 官方推荐资源。

Pipenv 是由 Kenneth Reitz 在一年多前创建的“面向开发者而生的 Python 开发工作流”,它已经成为管理软件包依赖关系的Python 官方推荐资源。但是对于它解决了什么问题,以及它如何比使用pip和requirements.txt文件的标准工作流更有用处,这两点仍然存在困惑。在本月的 Python 专栏中,我们将填补这些空白。

Python 包安装简史

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

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

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

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

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

新方法:Pipenv

Pipenv 旨在解决几个问题:

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

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

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

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

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

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

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

pipenv install

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

pipenv install --dev

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

使用 Pipenv

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

pip install pipenv

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

pipenv install django

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

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

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

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

pipenv lock

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

pipenv run python hello.py

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

启动一个 shell,运行:

pipenv shell

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

pipenv install requirements.txt

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

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • python
    +关注

    关注

    51

    文章

    4667

    浏览量

    83445
收藏 人收藏

    评论

    相关推荐

    示波器的FFT能解什么问题

    本文将教你用五种方法把示波器上的FFT做成极致! 一、示波器上的FFT是什么? 二、示波器的FFT能解什么问题? 三、示波器的FFT 经常变成用户手里的鸡肋,问题在哪? 四、我们把示波器上的频谱
    的头像 发表于 08-23 09:31 1.8w次阅读

    MicroPython:STM32上的Python开发

    初学者。Python本身自带的各种模块加上丰富的第三方模块,免去了很多“重复造轮子”的工作,节省了不少开发时间。Python的配置环境也不复杂,mac和linux都内置了python
    发表于 12-30 16:00

    python开发工具推荐

    Python开发软件可根据其用途不同分为两种,一种是Python代码编辑器,一种是Python集成开发工具,两者的配合使用可以极大的提高
    发表于 04-12 16:12

    Pipenv使用技巧

    ”微服务一条龙“最佳指南-工具篇:初步使用Pipenv
    发表于 09-17 07:11

    FPGA能解什么问题看了就知道

    了解FPGA?首先,如果你从未接触过FPGA(现场可编程门阵列),或者有过一点基础想要继续深入了解这个行业,在这个小节,我会向你介绍FPGA,并且向你解释FPGA都能解什么问题,如何解决这些问题,并讨论如何将设计进行优化等等。
    发表于 10-21 13:32

    eplan_路径功能文本能解什么问题

    eplan_路径功能文本是什么?eplan_路径功能文本能解什么问题?eplan_路径功能文本可能存在哪些问题?
    发表于 09-06 07:24

    用于物联网开发python

    在过去的几年中,Python编程语言在物联网开发中取得了长足的进步。当您拥有支持Python的物联网时,您将能够构建交互式对象并对其进行设计。在不影响大小的前提下,这种编程语言可提供语法的可读性
    发表于 12-25 09:28

    python适合做什么开发_python未来发展怎么样

    本文开始介绍了pythonPython优缺点,其次阐述了python可以用来做什么开发,最后分析了Python语言在未来的发展前景。
    发表于 04-26 16:32 8172次阅读

    一份2018年Python开源项目Top100清单!

    了。这是 Python 官方推荐的一个 Python 包管理工具,可以帮你把 Pipfile, pip, 和 virtualenv 整合到一起, 而且你也可以在浏览器中快速使用 Pipenv
    的头像 发表于 01-02 09:56 2832次阅读
    一份2018年<b class='flag-5'>Python</b>开源项目Top100清单!

    Python工程师面试时需要准备什么

    随着互联网的发展,python语言现在变得越来越火爆,Python程序员越来越受到大家的青睐!那么想进入Python行业,面试时需要注意些什么问题呢?我们在参加
    的头像 发表于 03-01 14:25 2049次阅读

    数据中台是什么,它能帮我们解决什么问题

    近几年来数据中台概念大火,市面上掀起了一波建业务中台、数据中台热潮,那么数据中台到底是什么?它的出现能解什么问题呢?
    的头像 发表于 04-13 15:11 3119次阅读

    python开发环境搭建步骤

    在正式学习Python编程之前,要先安装Python,这包括“标准Python”、“第三方Python包”、“Python程序
    的头像 发表于 05-05 22:23 2898次阅读
    <b class='flag-5'>python</b><b class='flag-5'>开发</b>环境搭建步骤

    Python虚拟环境pipenv的使用

    一般我们创建 Python 项目的时候都会创建一个虚拟环境,这样做的好处就是会把项目环境和操作系统环境区分开来,避免把操作系统环境弄乱。 还有一个痛点就是我们在开发环境开发完成之后,需要把代码复制到
    的头像 发表于 08-23 10:15 1516次阅读

    Python项目开发实战

    Python项目开发实战
    发表于 06-13 14:51 2次下载

    pcb仿真能解什么问题

    pcb仿真能解什么问题?  PCB(Printed Circuit Board,印刷电路板)是一种在电气和电子设备中应用广泛的基础元件。随着技术的不断发展,PCB设计也进入了数字化和智能化的时代
    的头像 发表于 08-29 16:40 1052次阅读