文章目录
更多精选文章,请关注公众号: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