我想獲取已安裝的PIP包列表以及這些包的URL。如何點擊包名網址列表
我知道有pip list
命令列出了所有安裝的軟件包,但它沒有顯示軟件包主頁的URL。
還有pip show
命令顯示有關包的URL信息,但它只適用於一個包。
有沒有一種方法可以將兩個命令結合起來以獲得包含各自主頁URL的完整軟件包列表?
我想獲取已安裝的PIP包列表以及這些包的URL。如何點擊包名網址列表
我知道有pip list
命令列出了所有安裝的軟件包,但它沒有顯示軟件包主頁的URL。
還有pip show
命令顯示有關包的URL信息,但它只適用於一個包。
有沒有一種方法可以將兩個命令結合起來以獲得包含各自主頁URL的完整軟件包列表?
一種方式做到這一點是這個shell一行代碼:
pip list --format=freeze | cut -d= -f1 | xargs pip show | awk '/^Name/{printf $2} /^Home-page/{print ": "$2}'
如果我們簡單地重新格式化pip show
命令的輸出端通過xargs
由pip list
返回的所有包執行。
輸出示例:
appdirs: http://github.com/ActiveState/appdirs
packaging: https://github.com/pypa/packaging
pip: https://pip.pypa.io/
setuptools: https://github.com/pypa/setuptools
six: http://pypi.python.org/pypi/six/
wheel: https://bitbucket.org/pypa/wheel/
是的,這一行內容很好。謝謝! –
下面是一個Python腳本,將顯示每個包的名稱與它的主頁URL一起。這有點令人費解,因爲pip沒有公共API,所以你必須使用它的主入口點並捕獲標準輸出。
import pip
import sys
if sys.version_info[0] == 2:
import StringIO
IO = StringIO.StringIO
else:
import io
IO = io.StringIO
def capture_pip_output(args):
stdout = IO()
sys.stdout = stdout
pip.main(args)
sys.stdout = sys.__stdout__
return stdout.getvalue().splitlines()
packages = capture_pip_output(['list', '--format', 'freeze'])
packages = [line.split('==', 1) for line in packages]
for package, version in packages:
info = capture_pip_output(['show', package])
for line in info:
if line.startswith('Home-page: '):
url = line.split(': ', 1)[1]
break
print('{package} {url}'.format(package=package, url=url))
謝謝!但是,這並不適合我。我得到: 回溯(最近呼叫最後): 文件「/home/mike/.pyenv/versions/2.7.3/lib/python2.7/logging/__init__.py」,行867,在發射寫入(fs%msg) TypeError:unicode參數預計得到'str' 運行'packages = capture_pip_output(['list','--format','freeze')之後,從文件list.py中讀取第250行 ])'在Django shell –
我針對Python 3.我會更新它,以便它也能在Python 2上運行。 – 2017-10-23 20:29:42
現在就工作,謝謝! –
我只是做一個bash循環或使用'xargs'。 – wim