如何一鍵理清大型Python項(xiàng)目依賴樹
?前言:
你可能時(shí)常會(huì)遇到由于包的版本不匹配導(dǎo)致代碼報(bào)錯(cuò)的問題,由于 pip freeze 將所有依賴項(xiàng)顯示為二維列表,這時(shí)候如果想找到這個(gè)錯(cuò)誤版本的包是比較麻煩的事情。這時(shí)候,有個(gè)工具你必須得知道,它就是 pipdeptree.
pipdeptree 是一個(gè)命令行實(shí)用程序,它能用于以依賴關(guān)系樹可視化的形式顯示已安裝的python包。
它適用于全局安裝在計(jì)算機(jī)上的各個(gè)模塊,也適用于Virtualenv等虛擬環(huán)境中的模塊。
1.安裝
你只需要在你的環(huán)境中輸入以下命令就能安裝 pipdeptree:
pip?install?pipdeptree
已通過測試的Python版本:2.7,3.5,3.6,3.7,3.8,3.9.
2.用法和示例
pip freeze 和 pipdeptree 最大的區(qū)別如下:
# pip freeze 的顯示 $ pip freeze Flask==0.10.1 itsdangerous==0.24 Jinja2==2.11.2 -e git+git@github.com:naiquevin/lookupy.git@cdbe30c160e1c29802df75e145ea4ad903c05386#egg=Lookupy MarkupSafe==0.22 pipdeptree @?file:///private/tmp/pipdeptree-2.0.0b1-py3-none-any.whl Werkzeug==0.11.2
可見,pip freeze 最多只能顯示一個(gè)依賴的列表,而在 pipdeptree ,每個(gè)模塊的依賴關(guān)系能夠非常直觀地展示出來:
$ pipdeptree Warning!!! Possibly conflicting dependencies found: * Jinja2==2.11.2 ?- MarkupSafe [required: >=0.23, installed:?0.22] ------------------------------------------------------------------------ Flask==0.10.1 ??- itsdangerous [required: >=0.21, installed:?0.24] ??- Jinja2 [required: >=2.4, installed:?2.11.2] ????- MarkupSafe [required: >=0.23, installed:?0.22] ??- Werkzeug [required: >=0.7, installed:?0.11.2] Lookupy==0.1 pipdeptree==2.0.0b1 ??- pip [required: >=6.0.0, installed:?20.1.1] setuptools==47.1.1 wheel==0.34.2
請注意這個(gè) Warning,提示了你哪些模塊會(huì)造成其依賴的模塊版本發(fā)生沖突,這是非常有用的提示,很多時(shí)候問題就出現(xiàn)在這里。
不僅如此,如果存在循環(huán)性依賴,比如:
CircularDependencyA => CircularDependencyB => CircularDependencyA
它會(huì)進(jìn)行如下提示:
$ pipdeptree --exclude pip,pipdeptree,setuptools,wheel Warning!!! Cyclic dependencies found: - CircularDependencyA => CircularDependencyB => CircularDependencyA - CircularDependencyB => CircularDependencyA => CircularDependencyB ------------------------------------------------------------------------ wsgiref==0.1.2 argparse==1.2.1
如果你想生成 requirements.txt,可以這么做:
$ pipdeptree -f | tee locked-requirements.txt Flask==0.10.1 ??itsdangerous==0.24 ??Jinja2==2.11.2 ????MarkupSafe==0.23 ??Werkzeug==0.11.2 gnureadline==8.0.0 -e git+git@github.com:naiquevin/lookupy.git@cdbe30c160e1c29802df75e145ea4ad903c05386#egg=Lookupy pipdeptree @ file:///private/tmp/pipdeptree-2.0.0b1-py3-none-any.whl ??pip==20.1.1 setuptools==47.1.1 wheel==0.34.2
在確認(rèn)沒有沖突的依賴項(xiàng)后,甚至可以將其“鎖定”,其中所有包都將固定到其當(dāng)前安裝的版本:
$?pipdeptree -f | sed?'s/ //g'?| sort -u > locked-requirements.txt
3. 可視化依賴樹
為了能夠可視化展示依賴樹,我們需要安裝GraphViz。安裝完成后輸入以下命令:
pipdeptree --graph-output png > dependencies.png # pipdeptree --graph-output dot > dependencies.dot # pipdeptree --graph-output pdf > dependencies.pdf # pipdeptree --graph-output svg > dependencies.svg
支持四種格式的輸出,這里png的輸出效果如下:
效果是非常不錯(cuò)的,大家如果有需要清理依賴的大型項(xiàng)目,可以用 pipdeptree 試一下。
到此這篇關(guān)于如何一鍵理清大型Python項(xiàng)目依賴樹的文章就介紹到這了,更多相關(guān) Python依賴樹清理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
用python修改excel表某一列內(nèi)容的操作方法
這篇文章主要介紹了用python修改excel表某一列內(nèi)容的操作代碼,在實(shí)現(xiàn)過程中用到openpyxl這個(gè)庫,要生成隨機(jī)數(shù)就要有random這個(gè)庫,具體代碼跟隨小編一起看看吧2021-06-06Python實(shí)現(xiàn)監(jiān)視程序的內(nèi)存使用情況
我們使用Python和它的數(shù)據(jù)處理庫套件進(jìn)行大量數(shù)據(jù)處理時(shí)候,可能使用了大量的計(jì)算資源,那么如何監(jiān)視程序的內(nèi)存使用情況就顯得尤為重要,下面我們就來了解一下具體實(shí)現(xiàn)方法吧2023-12-12Python fileinput模塊如何逐行讀取多個(gè)文件
這篇文章主要介紹了Python fileinput模塊如何逐行讀取多個(gè)文件,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10使用spyder3調(diào)試python程序的實(shí)現(xiàn)步驟
本文主要介紹了使用spyder3調(diào)試python程序的實(shí)現(xiàn)步驟,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-12-12Python教程之生產(chǎn)者消費(fèi)者模式解析
在并發(fā)編程中使用生產(chǎn)者和消費(fèi)者模式能夠解決大不多的并發(fā)問題。該模式通過平衡生產(chǎn)線程和消費(fèi)線程的工作能力來提高程序的整體處理數(shù)據(jù)的速度2021-09-09Python reques接口測試框架實(shí)現(xiàn)代碼
這篇文章主要介紹了Python reques接口測試框架實(shí)現(xiàn)代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-07-07python實(shí)現(xiàn)凱撒密碼加密解密的示例代碼
本文主要介紹了python實(shí)現(xiàn)凱撒密碼加密解密的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-06-06如何使用pandas對超大csv文件進(jìn)行快速拆分詳解
Pandas是Python語言的一個(gè)擴(kuò)展程序庫,提供高性能、易于使用的數(shù)據(jù)結(jié)構(gòu)和數(shù)據(jù)分析工具,下面這篇文章主要給大家介紹了關(guān)于如何使用pandas對超大csv文件進(jìn)行快速拆分的相關(guān)資料,需要的朋友可以參考下2022-07-07Moviepy模塊實(shí)現(xiàn)視頻添加圖片水印
本文主要介紹了Moviepy模塊實(shí)現(xiàn)視頻添加圖片水印,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-04-04