Pipenv:作为 Python 开发人员为什么应该使用它

2023-11-20

Pipenv 是一个旨在将所有打包世界中最好的东西带到 Python 世界的工具。它将 Pipfile、pip 和 virtualenv 整合到一个命令中。它会自动为您的项目创建和管理虚拟环境,并在您安装/卸载包时从您的 Pipfile 添加/删除包。

在深入研究之前,让我们先看看 Pipenv 倾向于解决的一些问题

Pipenv 解决的问题

Pipenv 通过提供统一和自动化的方法来处理依赖项、创建虚拟环境和解决依赖项,从而解决了 Python 项目中的依赖项管理问题。它通过将项目的依赖项锁定在Pipfile.lock中消除了手动依赖固定的需要,从而确保可重复性和确定性构建。与 requirements.txt 不同,Pipenv 不依赖手动更新子依赖项,因为它会自动解析依赖项并使它们保持最新。

  1. 依赖关系和虚拟环境管理: Pipenv 自动管理您项目的依赖关系,确保您的项目需要运行的包始终安装并保持最新。Pipenv 会自动为每个项目创建一个虚拟环境,从而更容易将项目彼此隔离并管理它们的依赖关系。

  1. 简化包安装: Pipenv 解决的另一个问题是安装包的过程。使用 requirements.txt 文件等传统方法,安装包的过程可能会很复杂且耗时。Pipenv 通过允许开发人员在 Pipfile 中指定项目所需的包来简化此过程,然后可以使用单个命令进行安装。此外,Pipenv 会自动解析依赖关系,确保安装每个包的正确版本。

  1. 可重复性: Pipenv 还通过将项目的依赖项锁定在 Pipfile.lock 中来确保可重复性这使得在另一台机器上轻松复制项目成为可能。相比之下,当使用 requirements.txt 文件时,依赖关系没有被锁定,并且很难确保在不同机器上复制相同的环境。

使用requirements.txt文件会导致许多问题,例如它没有指定要使用的所需包的版本。这可能会导致安装最新版本的软件包,即使它与开发期间使用的版本不向后兼容,也会导致应用程序在生产中中断。此外,即使固定了包的版本,也可能不会固定其子依赖项,从而导致安装最新版本并引起问题。

为了解决这个问题,一些开发人员使用pip freeze命令冻结所有包的确切版本,包括子依赖项,并将它们包含在 requirements.txt 文件中。然而,这种方法可能会导致一系列新问题,因为开发人员需要负责保持所有包都是最新的,包括子依赖项。这可能既费时又难以管理,尤其是在需要立即更新的包中发现安全问题时。

Pipenv 安装

要安装 Pipenv,请在终端中运行以下命令:

pip install pipenv

然后运行下一个命令

pipenv shell

此命令将自动激活并创建虚拟环境。

然后你应该看到这样的东西:

Creating a virtualenv for this project...
Pipfile:(the directory of your project)
.....
.....
Successfully created virtual environment!

现在我们可以使用 pipenv 安装我们的包了,注意如果你需要精确的版本,你需要提到它。例如:

pipenv install django==4.1.5

您还应该在终端中看到类似这样的内容:

Installing django==4.1.5...
Pipfile.lock not found, creating...
Locking [packages] dependencies...
Locking [dev-packages] dependencies...
Updated Pipfile.lock (c5aae75378f71e86f154c89ed111b8e652646df5f3a7e3d9df5fb1b2b1ba2d88)!
Installing dependencies from Pipfile.lock (ba2d88)...

当您检查您的项目目录时,您会注意到已经创建了两个文件,一个 Pipfile 和一个 Pipfile.lock。

在我们继续之前,让我们安装另一个包。

假设您想使用 pytest 在您的应用程序上运行一些测试,但知道生产中不需要 pytest,我们可以通过使用 —dev 来表示这种依赖专门用于开发。


pipenv install pytest --dev

这个参数 --dev 会将依赖项放在 Pipfile 的[dev-packages]一个特殊部分中。

我们终于安装了所有依赖项,并构建了我们的应用程序。一切都在开发中并准备好部署,对吧?在部署之前,我们必须锁定我们的环境以确保它在生产中保持一致。

pipenvlock# this command will update the Pipfile.lock. you dont need to manaually edit it since it its not a requirements.txt file.

设置 Pipfile.lock 后,运行此命令:

pipenv install--ignore-pipfile

该命令安装记录的最新成功环境。它还会忽略Pipfile并单独安装 Pipfile.lock 中的内容

如果其他开发人员想为您的代码做出贡献,他们只需运行下面的命令即可。

pipenvinstall--dev# it will install all the dependencies needed for development

遵循这个过程将解决我们之前讨论的问题。这将确保您在开发和生产环境中的依赖关系是相同的。

现在让我们继续......

Pifile 和 Pipfile.lock

Pipfile: Pipfile 是 Pipenv 用来管理 Python 项目依赖项的文件。它类似于 requirements.txt 文件,但增加了一些功能,而且格式不同,更易于阅读。Pipfile 用于指定项目运行所需的包,以及这些包的版本。

Pipfile 有几个部分:

  1. [source]:本节列出了可以安装软件包的来源。默认情况下,包是从 Python 包索引 (PyPI) 安装的,但可以将其他源添加到此部分。

  1. [packages]:该部分列出了项目运行所需的所有包,包括它们的版本。语法类似于 pip 的 requirements.txt 文件,包名后跟版本。

  1. [dev-packages]:此部分列出了开发所需的包,例如测试框架或 linting 工具。这些包不是运行项目所必需的,但对于开发是必需的。

  1. [requires]: 对于其他要求,如特定的 Python 版本。

[[source]]
url = "https://pypi.org/simple"
verify_ssl = truename = "pypi"[packages]
django = "==4.1.5"[dev-packages]
pytest = "*"[requires]
python_version = "3.10"

Pipfile 是 Pipenv 的重要组成部分,因为它允许开发人员指定项目运行所需的包。指定包的版本有助于确保从事该项目的每个人都使用相同的依赖项。

Pipfile 使共享项目和与他人协作变得更加容易,因为它提供了所需依赖项的清晰列表。

Pipfile.lock: pipfile.lock 是由 Pipenv 生成的文件,用于确保从事项目工作的每个人都具有相同的依赖项以及这些依赖项的相同版本。

pipfile.lock 文件是根据 Pipfile 中的信息生成的,包含了项目运行所需的包及其版本的完整准确记录。

Pipenv 使用此信息来确保在运行项目时安装和使用正确的包和版本。如果 Pipfile 中的包或其版本发生更改,pipfile.lock 文件将更新以反映这些更改。

pipfile.lock 文件还用于保护项目免受易受攻击的包的侵害。Pipenv 根据已知漏洞数据库检查 pipfile.lock 文件中列出的包,如果检测到任何易受攻击的包,将提醒开发人员。这有助于确保项目安全且没有已知漏洞。

Pipfile.lock 看起来像这样,它使用 JSON 作为语法

{
    "_meta": {
        "hash": {
            "sha256": "0401892dedcc2ab095249867cfacc9804fcb29bf6ecfa3423caa2a51e5599e12"
        },
        "pipfile-spec": 6,
        "requires": {
            "python_version": "3.10"
        },
        "sources": [
            {
                "name": "pypi",
                "url": "https://pypi.org/simple",
                "verify_ssl": true
            }
        ]
    },
        "django": {
            "hashes": [
                "sha256:4b214a05fe4c99476e99e2445c8b978c8369c18d4dea8e22ec412862715ad763",
                "sha256:ff56ebd7ead0fd5dbe06fe157b0024a7aaea2e0593bb3785fb594cf94dad58ef"
            ],
            "index": "pypi",
            "version": "==4.1.5"
        },
        .....
    }
}

要简单地卸载软件包,只需运行:

pipenv uninstall django 
or 
pipenv uninstall --all# wipes all packages

如何将 requirements.txt 转换为 Pipfile:要将 requirements.txt 文件转换为 Pipfile,请在终端中运行以下命令:

pipenvinstall-rrequirements.txt

Pip 和 Pipenv - 差异

Pip 和 Pipenv 都是 Python 的包管理工具,但它们的用途不同。

Pip 是一个简单的包管理器,用于安装和管理 Python 包。它是自 Python 2.7 版本以来就包含在 Python 中的标准工具。

另一方面,Pipenv 是一种更高级的包管理工具,旨在将 pip 和 virtualenv 的优点结合到一个工具中。Pipenv 为管理包和依赖项提供了一个更加用户友好的界面,它会自动创建和管理虚拟环境,从而更容易维护一个干净、有组织的 Python 环境。

Pipenv 为 Python 包管理提供了更全面的解决方案,但对于简单的项目来说可能有点过头了,而 Pip 是一种更直接的包管理工具。

我为什么要使用 Pipenv,它值得吗?

如果您想要一种更有条理和更有效的方式来管理您的 Python 包和依赖项,那么使用 Pipenv 是值得考虑的。

使用 Pipenv,您可以为您的项目创建虚拟环境,确保每个项目都有自己的一组包和依赖项,而不会干扰其他项目。这使得维护干净有序的环境以及管理依赖项之间的冲突变得更加容易。

Pipenv 提供了一个用户友好的包管理界面,并生成一个“Pipfile”,作为所有需要的包和版本的记录,使共享和重现项目环境变得更加容易。

这些功能使 Pipenv 成为具有多个依赖项的更大、更复杂的项目的不错选择,在这些项目中手动管理包和依赖项可能很困难。

对于想要简化工作流程并确保项目组织良好且可重现的 Python 开发人员来说,Pipenv 是一个非常有用的工具。

哇,你成功了。我希望你喜欢这篇文章,并且它提供的信息足以帮助你完成你的努力。感谢您的阅读和快乐的编码

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Pipenv:作为 Python 开发人员为什么应该使用它 的相关文章

随机推荐

  • 数据预处理-独热编码(One-Hot)

    1 部分特征如人的性别有男女 国家有中国 美国 法国等 并不是连续的 而是离散的 无序的 通常我们需要对其进行特征数字化 2 假如某个样本 某个人 他的特征是这样的 男 中国 乒乓球 我们可以用 0 0 4 来表示 但是这样的特征处理并不能
  • BeautifulSoup基本用法总结

    BeautifulSoup是Python的一个库 最主要的功能就是从网页爬取我们需要的数据 BeautifulSoup将html解析为对象进行处理 全部页面转变为字典或者数组 相对于正则表达式的方式 可以大大简化处理过程 0x01 安装 建
  • Leetcode 106. 从中序与后序遍历序列构造二叉树

    文章目录 题目 代码 9 18 首刷自解 题目 Leetcode 106 从中序与后序遍历序列构造二叉树 代码 9 18 首刷自解 class Solution public unordered map
  • UE4文字显示乱码“字字字字字字字字”的解决办法

    键盘win R 搜索fonts 2 滑到最底下右键复制 宋体常规简体字 3 复制到ue4项目的字体文件夹中 如下 注意在外部文件处复制 4 回到项目界面 此时右下角会有个弹窗提示是否确认导入 点击导入 然后会弹一个 字体样式导入选项 弹框
  • openGauss学习笔记-63 openGauss 数据库管理-资源池化架构

    文章目录 openGauss学习笔记 63 openGauss 数据库管理 资源池化架构 openGauss学习笔记 63 openGauss 数据库管理 资源池化架构 本文档主要介绍资源池化架构下的一些最佳实践和使用注意事项 用于支撑对相
  • go Cobra命令行工具入门

    简介 Github https github com spf13 cobra Star 26 5K Cobra是一个用Go语言实现的命令行工具 并且现在正在被很多项目使用 例如 Kubernetes Hugo和Github CLI等 通过使
  • Failed to set locale, defaulting to C.UTF-8解决方法

    CentOS 8Linux系统提示 Failed to set locale defaulting to C UTF 8 这是由于没有配置正确的语言环境导致的 Linux百科 使用root账户登录你的CentOS操作系统 然后执行两条命令
  • 现阶段计算机网络技术专业人才培养的发展对策

    确立具有高职特色的人才培养目标 在市场经济的条件下 人才培养首先要适应市场需求 以市场行业的需求为导 向制定人才培养目标 学校人才培养是否能满足社会需求 可以通过学生在对口行 业及相关领域的就业情况来衡量 高职教育培养高技能应用型人才 与研
  • Objective-C中的封装、继承、多态、分类

    封装 封装最好理解了 封装是面向对象的特征之一 是对象和类概念的主要特性 封装 也就是把客观事物封装成抽象的类 并且类可以把自己的数据和方法只让可信的类或者对象操作 对不可信的进行信息隐藏 继承 面向对象编程 OOP 语言的一个主要功能就是
  • 测试工具73款

    我们将本文的软件测试工具分为4类 1 Web应用测试工具 2 网站安全测试工具 3 跨浏览器测试工具 4 移动应用测试工具 注 工具排名没有任何意义 1 Web应用测试工具 我们列出了一些在Web应用程序上执行性能 负载和压力测试的关键工具
  • 开源项目MiniWord .NET Word 操作由Word模板和数据简单、快速生成文件

    MiniWord NET Word 介绍 MiniWord NET Word模板引擎 藉由Word模板和数据简单 快速生成文件 image Getting Started 安装 nuget link https www nuget org
  • ubuntu18.04命令安装ros2

    ROS2官方文档 本教程为apt get命令安装方式 官网教程有点问题 借鉴一下大佬的安装方式 文章目录 1 安装ROS2 1 1 安装秘钥相关指令 1 2 授权秘钥 1 3 添加ROS2软件源 1 4 安装 2 设置环境 可选但是推荐 2
  • vue路由器学习(个人学习笔记四)

    目录 友情提醒 第一章 路由简介 1 1 什么是路由 1 2 安装路由插件 第二章 自定义路由器 2 1 创建路由器文件index js文件 2 2 index js文件中配置路由信息 第三章 使用路由器 3 1 在main js文件中将路
  • 基于Item的协同过滤算法实践(最简单的在线电影推荐系统)

    上一篇文章 基于用户的协同过滤算法实践 中 基于用户的相似度生成推荐列表 本文将基于Item的相似度阐述 1 相似度 基于物品的协同过滤算法 简称ItemCF 给用户推荐那些和他们之前喜欢的物品相似的物品 不过ItemCF不是利用物品的内容
  • 用户权限数据转换为用户组列表(3/3) - Excel PY公式

    最近Excel圈里的大事情就是微软把PY塞进了Excel单元格 可以作为公式使用 轻松用PY做数据分析 系好安全带 老司机带你玩一把 实例需求 如下是AD用户的列表 每个用户拥有该应用程序的只读或读写权限 现在需要创建新的AD用户组 并根据
  • Source Insight4.0的安装以及配置

    安装source insight4 工具的动机 1 公司需求 2 source insight4 0工具是集开发快速以及界面美观和方便等多种优点于一个软件的编辑器 1 需要准备资料 source insight4 0的安装包 以及安装的过程
  • iOS内存详解

    堆栈 iOS内存条中有一部分是只读的 有一部分是可读可写的 我们操作的是可读可写部分 那么在这块内存当中 我们怎么划分堆和栈呢 我们可以限定死堆栈的内存空间 但是这样显然是不好的 那么可以使用相对弹性的空间 一个从上往下扩展 一个从下往上扩
  • Arthas阿里 阿尔萨斯诊断工具的学习

    以下所有内容基于Arthas的3 6 9版本 一 Arthas 基础 背景 线上诊断问题比较难复现 DEBUG等 都很痛苦 功能好处 通过JVM开放出来接口 代理功能 对JVM访问 获取JVM内存 线程 类 方法 变量等各种操作函数 并控制
  • Mysql数据库连接池的简单实现(基于C++11), 基础学完, 包教包会.

    项目技术点 C语言进行MYSQL数据库编程 无锁单例 基于STL队列加C 11新特性保证线程安全实现的生产者消费者模型 C 11多线程编程 线程间同步与互斥 基于CAS的原子整形 lambda表达式 shared ptr智能指针管理Conn
  • Pipenv:作为 Python 开发人员为什么应该使用它

    Pipenv 是一个旨在将所有打包世界中最好的东西带到 Python 世界的工具 它将 Pipfile pip 和 virtualenv 整合到一个命令中 它会自动为您的项目创建和管理虚拟环境 并在您安装 卸载包时从您的 Pipfile 添