如何点击包名网址列表
我想获取已安装的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