vlambda博客
学习文章列表

再见 requirements.txt,Python 管理依赖项请用 pip-tools!

关注"Python学习与数据挖掘"

设为“置顶或星标”,第一时间送达干货

资料专栏



几年前,当我第一次发现 Python 的 requirements.txt 和虚拟环境时,说实话我感觉真的很棒。

requirements.txt文件是管理依赖项的一种非常有用的方法,但过了一段时间,当你拥有多个子依赖项的依赖项时,开始迷失在它们的关系中。

例子

让我们通过一个简单的例子来解释使用它的主要问题。

你安装依赖项 F,它恰好具有 G 作为子依赖项。一段时间后,在 requirements.txt 中看到的只是 A、B、C、D、E、F、G、H 作为你的依赖项。

你不知道直接或间接安装了哪些依赖项,因此现在更新甚至删除 F 成为一个问题,因为你必须搜索才能知道 G 是作为子依赖项安装的。即使搜索,可以删除 G,还是其他包的子依赖项?

最终会留下陈旧的依赖项并堆积垃圾或花费大量时间进行完整搜索并删除所有未使用的内容。

这不是唯一的问题。如果你不够小心并且只是为了测试目的而安装了一个包,那也可能会永远出现在你项目的依赖项中。

解决方案

为了解决这个问题,许多聪明人想出了更好的方法来管理 Python 中的依赖项。我们有 pip-tools 和 poetry。

在本文中,我们将分享如何使用 pip-tools 的一个可靠示例,说明如何从项目开始就管理依赖项。

假设我们有一个项目,我们必须在其中使用 Django 和 Pandas。

1、安装 pip-tools

首先,您需要在您将使用的每个 virtualenv 中安装 pip-tools,但它就像使用一样简单:

python3 -m venv venv
source venv/bin/activate
pip install pip-tools

2、创建 requirements.in 文件

现在,我们创建一个 requirements.in 文件,并且只包含我们项目的直接依赖项。每次想要更新或包含依赖项时,你都必须来到这里。它看起来像这样:你能看出它与旧的.txt文件有何不同吗?在这一个中,我们只包括直接依赖项。您可以选择是否包含版本限制,如下所示:再见 requirements.txt,Python 管理依赖项请用 pip-tools!

3、编译你的需求

主要区别在于,这是从现在开始生成你的 requirements.txt 的秘诀。完成创建后,你可以运行以最终编译需求:

pip-compile ./requirements.in

这将在生成 .in 文件的同一文件夹中生成一个 requirements.txt。但是你会发现他们两个之间有很大的不同。requirements.txt现在通过在它们下面附加该信息来精确控制某个包是否是其他包的子依赖项,如下所示:再见 requirements.txt,Python 管理依赖项请用 pip-tools!就这样,您消除了之前讨论的所有问题。因为你拥有管理包裹所需的所有信息。

4、额外功能

除此之外,pip-tools 还提供了其他便利功能,你可以探索这些功能以使流程更加轻松。

要升级包,请使用以下命令(以 Django 为例):

pip-compile --upgrade-package django

再见 requirements.txt,Python 管理依赖项请用 pip-tools!这将自动更新你 requirements.txt 文件,包括这些更改。只需记住删除"小于版本4"的约束以允许它。

为了使你的 virtualenv 与当前的 requirements.txt 文件同步,可以简单地运行以下命令:

pip-sync

这将安装、升级或卸载您的 requirements.txt 文件中未包含的任何包。

希望这篇文章对所有开始探索这条道路的人有所帮助,因为我试图包含所有必要的知识来完成它。

长按或扫描下方二维码,后台回复:加群,即可申请入群。一定要备注:来源+研究方向+学校/公司,否则不拉入群中,见谅!

长按三秒,进入后台


推荐阅读