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

news2025/1/11 9:57:18

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 是一个非常有用的工具。

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/194001.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

抓包对抗原理与案例

服务端校验客户端 案例:爱奇艺 平时我们碰到的HTTP和HTTPS都在应用层,SOCKS在会话层,TCP和UDP在传输层,IP在网络层。 HTTP未加密主要有这些不足 通信使用明文(不加密),内容可能会被窃听 不验证通信方的身份,因此有可能遭遇伪装…

2月2日 读书笔记

段的起始地址用32位来表示,被称为段的基址,在本书中被分成了3段,分别为2字节、1字节、1字节。之所以这么做,主要是为了与80286时代的程序兼容。有了这样的规格,80286用的操作系统,也可以不用修改就在386以后…

不忘初心,勇攀高峰!低代码公司流辰信息紧抓机遇,努力超前冲!

在数字化发展趋势越来越激烈的当下,市场变得风云变幻,作为一家致力于提升企业办公自动化效率的低代码公司平台服务商,流辰信息矢志不渝,不忘初心,紧跟时代发展潮流,坚持围绕客户需求研发创新,提…

马哥架构第4周课程作业

docker应用一. docker常用命令博客1.1 Docker安装及基础命令介绍1.1.1 Docker 安装准备1.1.2 安装和删除方法1.1.2.1 Ubuntu 安装和删除Docker1.1.2.2 CentOS 安装和删除Docker1.1.2.3 Linux 二进制安装1.1.2.4 安装 podman1.1.2.5 在不同系统上实现一键安装 docker 脚本1.1.2.…

HBase入门概念

文章目录HBase存储结构数据模型table 逻辑结构切分存储table 物理结构架构 todo使用DDLDMLphoenixHBase nosql (k,v) 以HDFS为基础存储数据 存储结构 数据模型 nameSpace: 命名空间table: 表(需要声明…

浅谈C/S和B/S架构的工作原理及优缺点

C/S架构 一、C/S架构及其背景 C/S架构是一种比较早的软件架构,主要应用于局域网内。在这之前经历了集中计算模式,随着计算机网络的进步与发展,尤其是可视化工具的应用,出现过两层C/S和三层C/S架构,不过一直很流行也比…

蓝桥杯刷题019——观光公交(贪心)

题目描述 风景迷人的小城 Y 市,拥有 n 个美丽的景点。由于慕名而来的游客越来越多,Y 市特意安排了一辆观光公交车,为游客提供更便捷的交通服务。观光公交车在第 0 分钟出现在 1 号景点,随后依次前往 2、3、4……n 号景点。从第 i …

使用Workbook读取表格问题总结

使用Workbook读取表格问题总结一、Workbook类型二、问题总结1.SXSSFWorkbook为什么我Create了一万行Row但是却获取不到?2.读取表格一、Workbook类型 Workbook分三种类型: 1.HSSFWorkbook 用于Excel2003版及更早版本(扩展名为.xls)的导出; 2.…

苹果手机备忘录密码忘记了怎么办?快速解锁,亲测有效

很多小伙伴喜欢使用苹果手机的备忘录来记录重要的事情,并且还会给备忘录设置密码。可是使用的时间长了,就忘记了自己备忘录密码了。苹果手机备忘录密码忘记了怎么办?别担心,今天小编分享一个亲测有效的方法,快来看看吧…

纳瓦电子前向77GHz毫米波雷达获国内新能源头部车企定点!

伴随着中国自主品牌新车搭载ADAS功能的高速增长,中国本土毫米波雷达供应商迎来了前所未有的机遇期。 高工智能汽车研究院监测数据显示,今年1-11月中国市场(不含进出口)乘用车前装标配搭载前向毫米波雷达交付上险755.53万颗&#…

一站式开发平台 赋能办公全场景

近几年,数字化办公迎来了新的机遇,根据亿欧智库《2022中国数字化办公市场研究报告》推算,数字化办公2021年的市场规模达到973.89亿元,至2025年将达到1768.16亿元,整体增速保持平稳,2018-2025年的CAGR为15.8…

写IB EE(Extended Essay)时容易犯的五大错误

EE的重要性无需多言,EE和TOK一共占IB45分总分的3分,其中一门拿到E的话,就会fail,拿不到IB的diploma。虽说和学校老师会有meeting讨论的机会,但时间有限,提供的精准指导也有限。EE的要求很严谨,很…

基于java SSM springboot动物检疫信息管理系统设计和实现

基于java SSM springboot动物检疫信息管理系统设计和实现 博主介绍:5年java开发经验,专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 超级帅帅吴 Java毕设项目精品实战案例《500套》 欢迎点赞 收藏 ⭐留言 文末获…

Java集合(八)Map接口

我们来查看Map接口: 里面的k-v和set集合的不同之处在于:key仍然是一个对象,但是对于set来说value是一个常量, private static final Object PRESENT new Object(); set里面的value放的是 静态性质的PRESENT。 而map的value是自…

Issue—C#—ssl相关错误

报错:.net 6 : {"MessageTemplate": "An unhandled exception has occurred while executing the request.""Exception": "System.Net.Http.HttpRequestException: The SSL connection could not be established, see inner exc…

函数(基础)

目录 一、字符串函数 (一)常用的字符串函数 (二)举例 1. concat(拼接) 2. Lower(大写变小写) 3. upper(小写变大写) 4. lpad(左填充) 5. rpad(右填充) 6. trim(去掉前后空格) 7. ltrim(去掉左边…

Linux-远程管理命令

1.关机/重启序号命令对应英文作用01shutdown 选项 时间shutdown关机/重新启动1.1shutdownshutdown命令可以安全关闭或者重新启动系统选项含义-r重新启动提示:不指定选项和参数,默认表示1分钟之后关闭电脑远程维护服务器时,最好不要关闭系统&a…

Centos7 U盘 安装

目录 一 描述环境 二 下载镜像 2.1 阿里云下载地址: 2.2 Centos 下载: 三 制作U盘启动盘 3.1 下载软碟通 最新UltraISO官方免费下载 - UltraISO软碟通中文官方网站下载https://cn.ultraiso.net/xiazai.html 3.2 傻瓜安装即可(不赘述) 3.3…

怎么移除css的hover事件

移除css hover事件的方法:1、;通过“$("a").hover(function(){ alert(mouseover); }, function(){ alert(mouseout); })”方法绑定hover事件;2、通过“$(a).off(mouseenter).unbind(mouseleave);”方法取消绑定的hover事件即可。 j…

Filesystem closed报错问题处理

使用HDFS的时候 final Configuration conf new Configuration(); final FileSystem fs FileSystem.get(URI.create(hdfsFile), conf); final Path path new Path(hdfsFile); if (fs.exists(path)) {final FSDataInputStream is fs.open(path);final FileStatus stat fs.g…