<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          大型Python項(xiàng)目依賴樹很煩?教你一鍵理清

          共 3035字,需瀏覽 7分鐘

           ·

          2021-09-11 01:46

          你可能時(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 [email protected]: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,安裝GraphViz的教程可見這篇文章: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 試一下。

          我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實(shí)戰(zhàn)教程,請持續(xù)關(guān)注Python實(shí)用寶典。

          有任何問題,可以在公眾號后臺(tái)回復(fù):加群,回答相應(yīng)紅字驗(yàn)證信息,進(jìn)入互助群詢問。

          原創(chuàng)不易,希望你能在下面點(diǎn)個(gè)贊和在看支持我繼續(xù)創(chuàng)作,謝謝!

          點(diǎn)擊下方閱讀原文可獲得更好的閱讀體驗(yàn)

          Python實(shí)用寶典 (pythondict.com)
          不只是一個(gè)寶典
          歡迎關(guān)注公眾號:Python實(shí)用寶典

          瀏覽 62
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評論
          圖片
          表情
          推薦
          點(diǎn)贊
          評論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  无码视频在线播放 | 先锋影音自拍偷拍 | 国产片婬乱18一级毛片视頻 | 高清无码在线观看丁香五月婷婷 | 日韩女同性爱一区二区三区四区五区 |