使用Pipenv简化Python项目依赖管理
本文详细介绍如何使用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项目中依赖的管理。希望你也持相同观点!
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









