你可能時(shí)常會(huì)遇到由于包的版本不匹配導(dǎo)致代碼報(bào)錯(cuò)的問(wèn)題,由于 pip freeze 將所有依賴項(xiàng)顯示為二維列表,這時(shí)候如果想找到這個(gè)錯(cuò)誤版本的包是比較麻煩的事情。這時(shí)候,有個(gè)工具你必須得知道,它就是 pipdeptree .
pipdeptree 是一個(gè)命令行實(shí)用程序,它能用于以依賴關(guān)系樹(shù)可視化的形式顯示已安裝的python包。
它適用于全局安裝在計(jì)算機(jī)上的各個(gè)模塊,也適用于Virtualenv等虛擬環(huán)境中的模塊。
1.安裝
你只需要在你的環(huán)境中輸入以下命令就能安裝 pipdeptree:
pip install pipdeptree
已通過(guò)測(cè)試的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
可見(jiàn),pip freeze 最多只能顯示一個(gè)依賴的列表,而在 pipdeptree ,每個(gè)模塊的依賴關(guān)系能夠非常直觀地展示出來(lái):
$ 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
請(qǐng)注意這個(gè) Warning,提示了你哪些模塊會(huì)造成其依賴的模塊版本發(fā)生沖突,這是非常有用的提示,很多時(shí)候問(wèn)題就出現(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)沒(méi)有沖突的依賴項(xiàng)后,甚至可以將其“鎖定”,其中所有包都將固定到其當(dāng)前安裝的版本:
$ pipdeptree -f | sed 's/ //g' | sort -u > locked-requirements.txt
3. 可視化依賴樹(shù)
為了能夠可視化展示依賴樹(shù),我們需要安裝GraphViz,安裝GraphViz的教程可見(jiàn)這篇文章:Python 一鍵轉(zhuǎn)化代碼為流程圖。安裝完成后輸入以下命令:
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)注
關(guān)注
117文章
3833瀏覽量
84605 - 
                                代碼
                                +關(guān)注
關(guān)注
30文章
4930瀏覽量
72801 - 
                                虛擬環(huán)境
                                +關(guān)注
關(guān)注
0文章
30瀏覽量
9140 - 
                                python
                                +關(guān)注
關(guān)注
56文章
4850瀏覽量
89309 
發(fā)布評(píng)論請(qǐng)先 登錄
Python項(xiàng)目的依賴管理
方便快捷:PADS的一鍵快捷功能:一鍵灌銅,一鍵檢查DRC
一鍵還原系統(tǒng)
【GoKit申請(qǐng)】一鍵電源管理系統(tǒng)
Stm32怎么一鍵下載
Stm32 一鍵下載電路詳解
    
docker compose一鍵打包部署項(xiàng)目的實(shí)踐
Jenkins+docker+springboot一鍵自動(dòng)部署項(xiàng)目
Jenkins+Docker一鍵自動(dòng)化部署SpringBoot項(xiàng)目
Jenkins+Docker實(shí)現(xiàn)一鍵自動(dòng)化部署項(xiàng)目!
ApkAnalyser一鍵提取安卓應(yīng)用APK敏感信息
關(guān)于Jenkins+docker+springboot一鍵自動(dòng)部署項(xiàng)目
    
一鍵開(kāi)關(guān)電路的好處?生活中的一鍵開(kāi)關(guān)電路有哪些?
變電站一鍵順控系統(tǒng)和開(kāi)關(guān)柜一鍵順控有區(qū)別嗎?
    
          
        
        
大型Python項(xiàng)目依賴樹(shù)如何一鍵理清
                
 
           
            
            
                
            
評(píng)論