别再用 Requirements.txt 来管理依赖了
在我第一次用到 requirements.txt 时,别再是用R依赖在一个虚拟环境中,我使用 pip freeze > requirements.txt 就把项目中的管理依赖项导出到了 txt 文件中,然后上传到 GitHub,别再别人在使用该项目时可以使用 pip install -r requirements.txt 就可以了,用R依赖很方便不是管理吗。
不过,别再这样管理依赖的用R依赖方式也并不完美。
比如说,管理我这个项目就依赖一个 Django,别再结果导出的用R依赖 requirements.txt 却有这么多:
pip freeze
asgiref==3.5.0
backports.zoneinfo==0.2.1
Django==4.0.1
sqlparse==0.4.2
~/tmp ❯也就是说,你安装依赖项 A ,管理它恰好有 B 作为子依赖项,别再B 又依赖 C。用R依赖有时候你只是管理测试目的或者为了一个小 demo 也使用 pip 安装了一些包,那么这些依赖也会在 pip freeze 的列表中。
一段时间后,你在 requirements.txt 中看到的是 A、B、C、D、E、服务器租用F、G、H,你并不知道直接或间接安装了哪些依赖项,因此现在更新甚至删除 F 成为一个问题,你必须搜索才能知道 F 是作为子依赖项安装的。最终会留下陈旧的依赖项并堆积垃圾或花费大量时间进行搜索并删除所有未使用的内容。
如何解决这个问题呢?
那就是用 pip-tools,具体方法如下:
1、安装
首先,我们来创建一个虚拟环境,然后使用 pip 安装 pip-tools:
python3 -m venv venv
source venv/bin/activate
pip install pip-tools2、创建 requirements.in 文件
现在,我们需要创建一个 requirements.in 文件,并且只包含项目的直接依赖项。每次您想要更新或包含依赖项时,都必须先修改 requirements.in 。它与 requirements.txt 的区别也很明显,那就是只包含直接依赖的库,也可以指定版本:

3、编译 requirements.in
pip-compile requirements.in 可以直接生成 requirements.txt,但是你会发现这个 requirements.txt 跟 pip freeze 生成的免费源码下载有很大不同,你可以看到某个包是通过那个包引入的,依赖关系一目了然:

就这样,之前提到的问题已经不存在了,你拥有了管理依赖所需的所有信息。
4、额外功能
除此之外,pip-tools 还提供了其他有用的功能:
1、升级包。
以 Django 为例:
pip-compile --upgrade-package django这将自动更新您的 requirements.txt 文件,包括依赖项的修改。
2、同步包
为了使 virtualenv 与当前的 requirements.txt 文件同步,您可以简单地运行以下命令:
pip-sync -a requirements.txt这将先询问,当你输入 y 时,会在虚拟环境中安装、升级或卸载,最终与 requirements.txt 文件包含的包保持一致。
有关 pip-tools 的更多详细信息,请参阅其文档[1]。
相关文章
导入共匙复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:启动运行复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:
导入共匙复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:启动运行复制代码代码如下:复制代码代码如下:复制代码代码如下:复制代码代码如下:2025-11-05
很多人想要在注册商平台上注册到新的优质域名资源,是蛮有难度的一件事的。为了获取一一些优质的域名资源,投资者们将目标转移至老域名抢注业务上。那么在哪里可以抢注到优质老域名呢?老域名在哪里抢注?在米市,不2025-11-05- 软件开发是一个复杂而动态的过程,涉及许多工具、技术和实践。为了更快、更好地交付软件,开发人员需要有效地协作,自动执行任务,并管理环境。然而,由于软件架构的日益复杂,工具和平台的多样性,以及对安全和合规2025-11-05
经常听说杂米域名是米市中的价格“价值洼地”,那么杂米域名有哪些优势呢?杂米域名中哪类域名更有价值呢?今日小聚给大家介绍的就是杂米域名中的比较有性价比的一类域名。一、三杂米的相关介绍所谓3杂是指字母与数2025-11-05ivvi小骨Pro手机体验报告(一款功能强大的智能手机值得拥有)
摘要:作为一款颇具特色的智能手机,ivvi小骨Pro凭借其出色的性能和创新的设计吸引了众多消费者的关注。本文将从外观设计、性能表现、摄影功能、电池续航、系统体验以及价格等方面对ivvi小...2025-11-05
关于 Spartacus 开源项目的 peerDependencies
ng new app 生成的 Angular 应用,自带11个依赖:使用 Schematics 安装了 library 之后的客户 Storefront:本地新建一个空的文件夹,在里面执行命令行:np2025-11-05

最新评论