使用Pipenv简化Python项目依赖管理

半杯拿铁
半杯拿铁
发布时间:2026-10-13 | 3人浏览过
原创

本文详细介绍如何使用Pipenv管理Python项目依赖。Pipenv结合了Pip和Virtualenv的功能,通过Pipfile和Pipfile.lock简化依赖版本控制。文章涵盖安装步骤、包管理、开发环境隔离及代码运行方法,帮助开发者高效维护项目环境一致性。

在thoughtbot团队,我们主要使用Ruby和Rails进行开发,但始终致力于选择最合适的语言或框架来解决具体问题。近期,随着对机器学习技术的深入探索,Python的使用频率显著增加。

Ruby项目与Python项目在依赖管理上存在显著差异。目前Python生态中缺乏类似Ruby Bundler或Gemfiles的标准化依赖管理工具,因此Python开发者通常采用Virtualenv创建虚拟环境,并生成requirements.txt文件列出依赖包,最后通过Pip进行安装。

尽管上述方法通常能正常运行,但偶尔会出现异常行为,导致需要手动安装或删除特定版本的包。此外,开发者需定期更新requirements.txt以维持项目环境的一致性。特别是当虚拟环境中安装的Python包与项目本身无直接关联时,管理难度会增加。部分项目甚至保留两个版本的requirements.txt文件——分别用于开发和生产环境,这进一步增加了复杂性。

Kenneth Reitz推出的最新工具Pipenv旨在简化Python项目的依赖管理。该工具集成了Pip、Pipfile和Virtualenv的功能,是一个功能强大的命令行工具。

入门

首先,通过pip安装Pipenv及其相关依赖项,

pip install pipenv

接着将目录切换至包含Python项目的文件夹,并启动Pipenv,

cd my_project
pipenv install

此操作将在项目目录中生成两个新文件:Pipfile和Pipfile.lock,若项目尚不存在,则会自动创建一个新的虚拟环境。若在命令后添加--two或--three标志,将分别使用Python 2或Python 3初始化项目;否则,系统将使用默认版本的Python。

管理Python依赖关系

Pipfile用于存储项目依赖包的信息,它取代了传统Python项目中常用的requirements.txt文件。若在已存在requirements.txt文件的项目中启动Pipenv,应在从项目中删除该文件之前,使用Pipenv安装其中列出的所有依赖包。

要为项目安装Python包,请使用install关键字。例如,

pipenv install beautifulsoup4

上述命令将安装当前版本的Beautiful Soup包。若需删除包,可使用uninstall关键字,操作方式类似,

pipenv uninstall beautifulsoup4

通过更新Pipfile.lock可以锁定软件包名称、版本及其依赖关系列表。此操作可通过lock关键字完成,

pipenv lock

若其他用户克隆代码库,可将Pipfiles提交至Git存储库。这样,他们只需在系统中安装Pipenv,然后键入

pipenv install

Pipenv会自动识别Pipfiles,创建新的虚拟环境并安装所需的软件包。

管理你的开发环境

通常,某些Python包仅在开发环境中需要,而在生产环境中不需要,例如单元测试框架。Pipenv通过--dev标志将两种环境区分开来。

pipenv install --dev nose2

例如,安装nose2,但将其标记为仅在开发环境中需要的软件包。这非常有用,因为当你在生产环境中安装项目时,

pipenv install

默认情况下不会安装nose2包。然而,若其他开发人员将项目克隆到自己的开发环境中,他们可以使用--dev标志,

pipenv install –dev

从而安装所有依赖项,包括开发所需的包。

运行你的代码

为了激活与Python项目关联的虚拟环境,你可以使用简单的shell命令,例如

pipenv run which python

这将在你的虚拟环境中执行which python命令,并显示与虚拟环境关联的Python可执行文件路径。这是在虚拟环境中运行你自己Python代码的一种简便方法,

pipenv run python my_project.py

若你不想每次运行Python时都输入冗长的命令,可以在shell中设置别名,例如,

alias prp="pipenv run python"

保持简单

希望本文能帮助你了解如何使用Pipenv管理Python项目。该工具发布不足一个月,我对其未来发展充满兴趣。我不希望它变得完全像Ruby的Bundler,但我肯定会支持它,以简化Python项目中依赖的管理。希望你也持相同观点!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表