[729]Python依赖包管理工具pipreqs、pip-tools

更多精选文章,请关注公众号:python前行者
python前行者

pipreqs生成依赖清单requirements.txt

pipreqs 对给定文件夹中的python依赖进行解析, 并且生成依赖描述文件requirements.txt

pip install pipreqs 

装好之后cmd到项目路径下:

pipreqs ./

很开心,完美的报错了,我首先想到的解决办法是,找到安装包pipreqs.py文件,直接修改pipreqs.py 的75行,将encoding改为utf-8,想想觉得这种方式不够友好,请看下面这种解决方式

pipreqs ./ --encoding=utf-8

当项目里存在requirements.txt文件时,执行会提示一下警告,use --force to overwrite it,执行pipreqs ./ --encoding=utf-8 --force即可

D:\soft\pycharm\pycharmcode\spider_project\companyNews_all>pipreqs ./ --encoding=utf-8
WARNING: Requirements.txt already exists, use --force to overwrite it

D:\soft\pycharm\pycharmcode\spider_project\companyNews_all>pipreqs ./ --encoding=utf-8 --force
INFO: Successfully saved requirements file in ./requirements.txt

搞定~但是发现可能会有个别包漏掉,还得手工再解决一下,不过至少大头的依赖都已经列出来了

使用requirements.txt自动安装所有依赖包

一条命令全搞定

pip install -r requirements.txt

使用pip freeze >requirements.txt命令迁移模块

pip_freeze官方链接:https://pip.pypa.io/en/stable/reference/pip_freeze/

pip freeze >requirements.txt会生成当前python环境安装的所有安装包,生成的文件名可以任意命名,安装的时候也要用这个名字

pip freeze > requirements.txt

pip freeze 会附带上一些不需要的包,以及某些包依赖的包~

支持的写法

-r base.txt # base.txt下面的所有包
pypinyin==0.12.0 # 指定版本(最日常的写法)
django-querycount>=0.5.0 # 大于某个版本
django-debug-toolbar>=1.3.1,<=1.3.3 # 版本范围

Anaconda导出环境中所有组件的requirements.txt文件

conda批量导出包含环境中所有组件的requirements.txt文件

conda list -e > requirements.txt

conda批量安装requirements.txt文件中包含的组件依赖

#这种执行方式,一遇到安装不上就整体停止不会继续下面的包安装
conda install --yes --file requirements.txt

#这个执行能解决上面出现的不执行后续包的问题
FOR /F "delims=~" %f in (requirements.txt) DO conda install --yes "%f" 

pip-tools

pypi:https://pypi.org/project/pip-tools/

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

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

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

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

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

解决方案

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

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

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

安装 pip-tools

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

pip install pip-tools

创建requirements.in文件

现在,我们创建一个 requirements.in文件,并且只包含我们项目的直接依赖项。每次想要更新或包含依赖项时,你都必须来到这里。它看起来像这样:

你能看出它与旧的.txt文件有何不同吗?在这一个中,我们只包括直接依赖项。您可以选择是否包含版本限制,如下所示:

编译你的需求

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

pip-compile ./requirements.in

这将在生成 .in 文件的同一文件夹中生成一个 requirements.txt。但是你会发现他们两个之间有很大的不同。requirements.txt现在通过在它们下面附加该信息来精确控制某个包是否是其他包的子依赖项,如下所示:

就这样,您消除了之前讨论的所有问题。因为你拥有管理包裹所需的所有信息。

使用pip-tools可以精准的控制项目依赖

pip-compile 可以在setup.py文件或者requirements.in文件中递归的解析出完整的依赖路径. 并将其输出到requirements.txt之中.

(这里的setup.py是python应用的分发工具. 暂时还用不上. 直接写出requirements.in就行了.)

# pip-compile 
## 用例
pip-compile 默认根据setup.py生成依赖描述文件
pip-compile 默认根据requirements.in生成依赖描述文件
## 这里可以通过两个不同名的依赖描述文件来管理两套环境
## 另外requirements.in中可以通过-c选项来嵌套的引入requirements.txt约束

## 常用参数
--upgrade 根据依赖描述文件更新所有包
-P --upgrade-package <pkg_name> 对指定包进行更新(可以加上版本限制)
--output-file 指定输出文件

额外功能

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

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

pip-compile --upgrade-package django

这将自动更新你 requirements.txt 文件,包括这些更改。只需记住删除"小于版本4"的约束以允许它。

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

pip-sync

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

pip-sync 需要安装在与项目相同的虚拟环境之中。
pip-sync可以让当前的虚拟环境与pip-compile生成的requirements.txt文件相一致.

# pip-sync

## 用例
pip-sync <requirements-file> 可以同时同步多个环境. 当然, 这里的默认值为requirements.txt

pigar

pigar -s选项可以从import name中查找出真实的依赖库

pipdeptree

用于展示解析出项目依赖的树形结构

参考:https://www.cnblogs.com/maxiaodoubao/p/10605850.html
https://blog.csdn.net/chekongfu/article/details/83187591
https://blog.csdn.net/weixin_45240960/article/details/125492540
https://zhuanlan.zhihu.com/p/486778776

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

周小董

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值