前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >别再用 requirements.txt 来管理依赖了

别再用 requirements.txt 来管理依赖了

作者头像
somenzz
发布2022-02-15 14:55:51
2.5K0
发布2022-02-15 14:55:51
举报
文章被收录于专栏:Python七号Python七号

在我第一次用到 requirements.txt 时,是在一个虚拟环境中,我使用 pip freeze > requirements.txt 就把项目中的依赖项导出到了 txt 文件中,然后上传到 GitHub,别人在使用该项目时可以使用 pip install -r requirements.txt 就可以了,很方便不是吗。

不过,这样管理依赖的方式也并不完美。

比如说,我这个项目就依赖一个 Django,结果导出的 requirements.txt 却有这么多:

代码语言:javascript
复制
? pip freeze
asgiref==3.5.0
backports.zoneinfo==0.2.1
Django==4.0.1
sqlparse==0.4.2
~/tmp ?

也就是说,你安装依赖项 A ,它恰好有 B 作为子依赖项,B 又依赖 C。有时候你只是测试目的或者为了一个小 demo 也使用 pip 安装了一些包,那么这些依赖也会在 pip freeze 的列表中。

一段时间后,你在 requirements.txt 中看到的是 A、B、C、D、E、F、G、H,你并不知道直接或间接安装了哪些依赖项,因此现在更新甚至删除 F 成为一个问题,你必须搜索才能知道 F 是作为子依赖项安装的。最终会留下陈旧的依赖项并堆积垃圾或花费大量时间进行搜索并删除所有未使用的内容。

如何解决这个问题呢?

那就是用 pip-tools,具体方法如下:

1、安装

首先,我们来创建一个虚拟环境,然后使用 pip 安装 pip-tools:

代码语言:javascript
复制
python3 -m venv venv
source venv/bin/activate
pip install pip-tools
2、创建 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 为例:

代码语言:javascript
复制
pip-compile --upgrade-package django

这将自动更新您的 requirements.txt 文件,包括依赖项的修改。

2、同步包

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

代码语言:javascript
复制
pip-sync -a requirements.txt

这将先询问,当你输入 y 时,会在虚拟环境中安装、升级或卸载,最终与 requirements.txt 文件包含的包保持一致。

最后的话

好了,你又学到了一个新的技能 pip-tools,是精细化管理依赖库的必备工具

参考资料

[1]文档: https://github.com/jazzband/pip-tools

本文参与?腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2022-01-27,如有侵权请联系?cloudcommunity@tencent.com 删除

本文分享自 Python七号 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体同步曝光计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1、安装
  • 2、创建 requirements.in 文件
  • 3、编译 requirements.in
  • 4、额外功能
  • 最后的话
    • 参考资料
    领券
    问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
    http://www.vxiaotou.com