hi,你好!欢迎访问本站!登录
本站由简数采集腾讯云宝塔系统阿里云强势驱动
当前位置:首页 - 教程 - 杂谈 - 正文 君子好学,自强不息!

Python 依靠库治理哪家强?pipreqs、pigar、pip-tools、pipdeptree 任君遴选

2019-11-18杂谈搜奇网23°c
A+ A-

在 Python 的项目中,怎样治理所用的悉数依靠库呢?最主流的做法是保护一份“requirements.txt”,纪录下依靠库的名字及其版本号。

那末,怎样来生成这份文件呢?在上篇文章《由浅入深:Python 中怎样完成自动导入缺失的库?》中,我提到了一种通例的要领:

pip freeze > requirements.txt

这类要领用起来轻易,但有几点不足:

  • 它搜刮依靠库的局限是全局环境,因而会把项目以外的库到场进来,形成冗余(平常是在虚拟环境中运用,但照样能够包括无关的依靠库)
  • 它只会纪录以“pip install”体式格局装置的库
  • 它对依靠库之间的依靠关联不做辨别
  • 它没法推断版本差别及轮回依靠等状况
  • …………

可用于项目依靠治理的东西有许多,本文重要缭绕与 requirements.txt 文件相干的、比较类似却又各具特色的 4 个三方库,扼要引见它们的运用要领,排列一些明显的功用点。至于哪一个是最好的治理计划呢?卖个关子,请往下看……

pipreqs

这是个很受迎接的用于治理项目中依靠库的东西,能够用“pip install pipreqs”敕令来装置。它的重要特点有:

  • 搜刮依靠库的局限是基于目次的体式格局,很有针对性
  • 搜刮的依据是剧本中所 import 的内容
  • 能够在未装置依靠库的环境上生成依靠文件
  • 查找软件包信息时,能够指定查询体式格局(只在当地查询、在 PyPi 查询、或许在自定义的 PyPi 效劳)

基础的敕令选项以下:

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 文件中的解释,能够供应很雄厚的信息。

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”一致装置。它最大的上风是能够精准地掌握项目的依靠库。

两个东西的用处及关联图以下:

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 项目的依靠树,经由过程有条理的缩进花样,显现它们的依靠关联,不像前面那些东西只会生成扁平的并列关联。

除此以外,它还能够:

  • 生成广泛实用的 requirements.txt 文件
  • 逆向查找某个依靠库是怎样引入进来的
  • 提醒出互相争执的依靠库
  • 能够发明轮回依靠,举行告警
  • 生成多种花样的依靠树文件(json、graph、pdf、png等等)

它也有缺点,比方没法穿透虚拟环境。假如要在虚拟环境中事情,必须在该虚拟环境中装置 pipdeptree。由于跨虚拟环境会涌现反复或争执等状况,因而须要限制虚拟环境。然则每一个虚拟环境都装置一个 pipdeptree,照样挺让人难熬痛苦的。

好啦,4 种库引见终了,它们的中心功用都是剖析依靠库,生成 requirements.txt 文件,同时,它们又具有一些差别,补齐了传统的 pip 的某些不足。

本文不对它们作周全的测评,只是选取了一些重要特征举行引见,幸亏它们装置轻易(pip install xxx),运用也简朴,感兴趣的同砚不妨一试。

更多雄厚的细节,请查阅官方文档:

https://github.com/bndr/pipreqs

https://github.com/damnever/pigar

https://github.com/jazzband/pip-tools

https://github.com/naiquevin/pipdeptree

民众号【Python猫】, 本号连载优良的系列文章,有喵星哲学猫系列、Python进阶系列、好书引荐系列、手艺写作、优良英文引荐与翻译等等,迎接关注哦。

  选择打赏方式
微信赞助

打赏

QQ钱包

打赏

支付宝赞助

打赏

  移步手机端
Python 依靠库治理哪家强?pipreqs、pigar、pip-tools、pipdeptree 任君遴选

1、打开你手机的二维码扫描APP
2、扫描左则的二维码
3、点击扫描获得的网址
4、可以在手机端阅读此文章
未定义标签

本文来源:搜奇网

本文地址:https://www.sou7.cn/282022.html

关注我们:微信搜索“搜奇网”添加我为好友

版权声明: 本文仅代表作者个人观点,与本站无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。请记住本站网址https://www.sou7.cn/搜奇网。

发表评论

选填

必填

必填

选填

请拖动滑块解锁
>>