Pipenv仅用了一年时间就成为Python官方推荐的用于管理包依赖项的资源。Pipenv是KennethReitz一年多前创建的“面向开发人员的Python开发工作流程”,现已成为Python官方推荐的用于管理包依赖项的资源。但对于它解决了什么问题,以及它比使用pip和requirements.txt文件的标准工作流程更有用,人们仍然感到困惑。在本月的Python专栏中,我们将填补这些空白。Python包安装简史要了解Pipenv解决的问题,了解Python包管理的演变过程很有用。让我们回到第一个Python版本,那时我们有Python,但没有安装包的干净方法。然后是EasyInstall,这个包可以让安装其他Python包变得相对容易,但它也引入了一个问题:卸载不需要的包并不容易。pip来了,大多数Python用户都很熟悉。pip允许我们安装和卸载包。我们可以指定版本,运行pipfreeze>requirements.txt将已安装包的列表输出到文本文件,并使用与pipinstall-rrequirements.txt相同的文本文件来安装应用程序需要的所有包。但是pip不包含将包彼此隔离的方法。我们可能会开发使用同一库的不同版本的应用程序,因此我们需要一种方法来做到这一点。随之而来的是虚拟环境,它使我们能够为我们开发的每个应用程序创建一个小型的、隔离的环境。我们见过许多用于管理虚拟环境的工具:virtualenv、venv、virtualenvwrapper、pyenv、pyenv-virtualenv、pyenv-virtualenvwrapper等等。它们都可以与pip和requirements.txt文件一起正常工作。新方法:PipenvPipenv旨在解决几个问题:首先,您需要安装包的pip库,以及创建虚拟环境的库和管理虚拟环境的库,然后是与这些库相关的所有命令。这些都需要管理。Pipenv带有包管理和虚拟环境支持,因此您可以使用一个工具来安装、卸载、跟踪和记录依赖项,以及创建、使用和组织您的虚拟环境。当你用它来启动一个项目时,如果你还没有使用Pipenv,Pipenv会自动为项目创建一个虚拟环境。Pipenv通过删除requirements.txt规范并将其移动到名为Pipfile的新文档中来执行此依赖关系管理。使用Pipenv安装库时,项目的Pipfile会自动更新安装详细信息,包括版本信息,可能还有Git存储库位置、文件路径和其他信息。其次,Pipenv希望能够更轻松地管理复杂的相互依赖关系。你的应用程序可能依赖某个版本的库,而那个库可能依赖另一个特定版本的库,这些依赖关系像乌龟一样堆积起来。当您的应用程序使用的两个库具有冲突的依赖关系时,您的情况会变得很艰难。Pipenv希望通过在名为Pipfile.lock的文件中跟踪应用程序相互依赖树来减轻这种痛苦。Pipfile.lock还验证在生产中是否使用了正确版本的依赖项。另外,当多个开发人员在一个项目上工作时,Pipenv非常方便。使用pip工作流程,Casey可能会安装一个库并花两天时间使用该库实现一项新功能。当Casey提交更改时,他可能会忘记运行pipfreeze来更新requirements.txt文件。第二天,Jamie拉取了Kathy的更改,测试突然失败了。花了一段时间才意识到问题是requirements.txt文件中缺少库,Jamie没有在虚拟环境中安装它。因为Pipenv在安装时会自动记录依赖项,如果Jamie和Kathy使用Pipenv,Pipfile将自动更新并包含在Kathy的提交中。这让Jamie和Kathy可以节省时间并更快地运送他们的产品。***,向从事您项目的其他人推荐Pipenv,因为它使用标准化的方式安装项目依赖项以及开发和测试要求。使用带有requirements.txt文件的pip工作流程意味着您可能只有一个requirements.txt文件,或者针对不同环境有多个requirements.txt文件。例如,您的同事可能不清楚在笔记本电脑上运行项目时应该运行dev.txt还是local.txt。当两个相似的requirements.txt文件彼此不同步时,它也会引起混淆:local.txt是否已过时,或者它真的应该与dev.txt不同吗?多个requirements.txt文件需要更多上下文和文档才能使其他人能够按预期正确安装依赖项。此工作流有可能混淆并增加您的维护负担。使用生成Pipfile的Pipenv,可以通过为您管理不同环境的依赖性来避免这些问题。此命令将安装主要项目依赖项:pipenvinstall添加--dev标志将安装开发/测试requirements.txt:pipenvinstall--dev使用Pipenv还有其他好处:它具有更好的安全功能,易于理解format映射您的依赖项,无缝处理.env文件,并可以在一个文件中自动处理开发和生产环境的不同依赖项。您可以在文档中阅读更多内容。使用Pipenv官方Python包管理教程的管理应用程序依赖项部分详细介绍了使用Pipenv的基础知识。要安装Pipenv,请使用pip:pipinstallpipenv要安装项目中使用的包,请切换到项目目录。然后安装一个包(我们将使用Django作为示例),运行:pipenvinstalldjango你会看到一些输出表明Pipenv正在为你的项目创建一个Pipfile。如果您还没有使用虚拟环境,您还会看到Pipenv的一些输出,表明它正在为您创建虚拟环境。然后您将看到通常在安装软件包时看到的输出。要生成Pipfile.lock文件,请运行:pipenvlock您还可以使用Pipenv运行Python脚本。运行名为hello.py的上层Python脚本:pipenvrunpythonhello.py,你会在控制台看到预期的结果。要启动shell,请运行:pipenvshell如果您希望将当前使用requirements.txt文件的项目转换为使用Pipenv,请安装Pipenv并运行:pipenvinstallrequirements.txt这将创建一个Pipfile并安装指定的requirements.txt。考虑升级您的项目!要了解更多信息,请查看Pipenv文档,特别是Pipenv的基本用法,以帮助您进一步学习。Pipenv的创建者KennethReitz在最近的PyTennessee上为Pipenv做了一次演讲:“Python中依赖管理的未来”。这次谈话没有录音,但他的幻灯片有助于理解Pipenv的功能及其解决的问题。
