Python依赖库太多怎么办

发布时间:2021-02-02 13:57:05 作者:小新
来源:亿速云 阅读:265

这篇文章给大家分享的是有关Python依赖库太多怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

在 Python 的项目中,如何管理所用的全部依赖库呢?最主流的做法是维护一份“requirements.txt”,记录下依赖库的名字及其版本号。

那么,如何来生成这份文件呢?在上篇文章《由浅入深:Python 中如何实现自动导入缺失的库?》中,我提到了一种常规的方法:

pip freeze 
>
 requirements
.
txt

这种方法用起来方便,但有几点不足:

…………

可用于项目依赖管理的工具有很多,本文主要围绕与 requirements.txt 文件相关的、比较相似却又各具特色的 4 个三方库,简要介绍它们的使用方法,罗列一些显著的功能点。至于哪个是最好的管理方案呢?卖个关子,请往下看……

pipreqs

这是个很受欢迎的用于管理项目中依赖库的工具,可以用“pip install pipreqs”命令来安装。它的主要特点有:

基本的命令选项如下:

Usage
:

 pipreqs 
[
options
]
 
<path>



Options
:

 
--
use
-
local
   
Use
 ONLY 
local
 
package
 info instead of querying 
PyPI

 
--
pypi
-
server 
<url>
 
Use
 custom 
PyPi
 server

 
--
proxy 
<url>
   
Use
 
Proxy
,
 parameter will be passed to requests library
.
 
You
 can also just 
set
 the

       environments parameter 
in
 your terminal
:

       $ 
export
 HTTP_PROXY
=
"http://10.10.1.10:3128"

       $ 
export
 HTTPS_PROXY
=
"https://10.10.1.10:1080"

 
--
debug    
Print
 debug information

 
--
ignore 
<dirs>
...
 
Ignore
 extra directories

 
--
encoding 
<charset>
 
Use
 encoding parameter 
for
 file open

 
--
savepath 
<file>
  
Save
 the list of requirements 
in
 the given file

 
--
print
    
Output
 the list of requirements 
in
 the standard output

 
--
force    
Overwrite
 existing requirements
.
txt

 
--
diff 
<file>
   
Compare
 modules 
in
 requirements
.
txt to project imports
.

 
--
clean 
<file>
  
Clean
 up requirements
.
txt 
by
 removing modules that are 
not
 imported 
in
 project
.

其中需注意,很可能遇到编码错误:UnicodeDecodeError:'gbk'codec can't decode byte 0xae in。需要指定编码格式“--encoding=utf8”。

在已生成依赖文件“requirements.txt”的情况下,它可以强行覆盖、比对差异以及清除不再使用的依赖项。

pigar

pigar 同样可以根据项目路径来生成依赖文件,而且会列出依赖库在文件中哪些位置使用到了。这个功能充分利用了 requirements.txt 文件中的注释,可以提供很丰富的信息。

Python依赖库太多怎么办

pigar 对于查询真实的导入源很有帮助,例如 bs4 模块来自 beautifulsoup4 库, MySQLdb 则来自于 MySQL_Python 库。可以通过“-s”参数,查找真实的依赖库。

$ pigar 
-
s bs4 
MySQLdb

它使用解析 AST 的方式,而非正则表达式的方式,可以很方便地从 exec/eval 的参数、文档字符串的文档测试中提取出依赖库。

另外,它对于不同 Python 版本的差异可以很好地支持。例如, concurrent.futures 是 Python 3.2+ 的标准库,而在之前早期版本中,需要安装三方库 futures ,才能使用它。pigar 做到了有效地识别区分。(PS:pipreqs 也支持这个识别,详见这个合入:https://github.com/bndr/pipreqs/pull/80)

pip-tools

pip-tools 包含一组管理项目依赖的工具:pip-compile 与 pip-sync,可以使用命令“pip install pip-tools”统一安装。它最大的优势是可以精准地控制项目的依赖库。

两个工具的用途及关系图如下:

Python依赖库太多怎么办

pip-compile 命令主要用于生成依赖文件和升级依赖库,另外它可以支持 pip 的“Hash-Checking Mode ”,并支持在一个依赖文件中嵌套其它的依赖文件(例如,在 requirements.in 文件内,可以用“-c requirements.txt”方式,引入一个依赖文件)。

它可以根据 setup.py 文件来生成 requirements.txt,假如一个 Flask 项目的 setup.py 文件中写了“install_requires=['Flask']”,那么可以用命令来生成它的所有依赖:

$ pip
-
compile
#
# This file is autogenerated by pip-compile
# To update, run:
#
# pip-compile --output-file requirements.txt setup.py
#
click
==
6.7
# via flask
flask
==
0.12
.
2
itsdangerous
==
0.24
# via flask
jinja2
==
2.9
.
6
# via flask
markupsafe
==
1.0
# via jinja2
werkzeug
==
0.12
.
2
# via flask

在不使用 setup.py 文件的情况下,可以创建“requirements.in”,在里面写入“Flask”,再执行“pip-compile requirements.in”,可以达到跟前面一样的效果。

pip-sync 命令可以根据 requirements.txt 文件,来对虚拟环境中进行安装、升级或卸载依赖库(注意:除了 setuptools、pip 和 pip-tools 之外)。这样可以有针对性且按需精简地管理虚拟环境中的依赖库。

另外,该命令可以将多个“*.txt”依赖文件归并成一个:

$ pip-sync dev-requirements.txt requirements.txt

pipdeptree

它的主要用途是展示 Python 项目的依赖树,通过有层次的缩进格式,显示它们的依赖关系,不像前面那些工具只会生成扁平的并列关系。

Python依赖库太多怎么办

除此之外,它还可以:

它也有缺点,比如无法穿透虚拟环境。如果要在虚拟环境中工作,必须在该虚拟环境中安装 pipdeptree。因为跨虚拟环境会出现重复或冲突等情况,因此需要限定虚拟环境。但是每个虚拟环境都安装一个 pipdeptree,还是挺让人难受的。

感谢各位的阅读!关于“Python依赖库太多怎么办”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. nginx的TCPwait太多;
  2. beego的安装(依赖库下载)

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

python

上一篇:使用python进行pdf文件分割的方法

下一篇:JavaScript借用构造函数继承的方法

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》