PyPi的JSON API - 如何列出包?

时间:2014-01-28 23:18:18

标签: json api pypi

JSON API for PyPI允许获取包的数据:

http://pypi.python.org/pypi/<package_name>/json
http://pypi.python.org/pypi/<package_name>/<version>/json

但是,是否可以通过GET调用获取所有PyPI包的列表(或者,例如,最近的包)?

5 个答案:

答案 0 :(得分:12)

最简单的方法是使用simple index at PyPI列出所有包而不会产生任何开销。然后,您可以通过对问题中提到的URL执行GET请求来单独请求每个包的JSON。

答案 1 :(得分:11)

我知道您要求通过JSON API执行此操作,但您可以使用XML-RPC api轻松获取此信息,而无需解析HTML。

try:
     import xmlrpclib
except ImportError:
     import xmlrpc.client as xmlrpclib

client = xmlrpclib.ServerProxy('https://pypi.python.org/pypi')
# get a list of package names
packages = client.list_packages()

答案 2 :(得分:2)

注意:为了使这样的任务变得简单,我实现了一个自己的 Python 模块。可以使用 pip:

安装
pip install jk_pypiorgapi

该模块使用起来非常简单。在实例化代表 API 接口的对象后,您可以使用它:

import jk_pypiorgapi

api = jk_pypiorgapi.PyPiOrgAPI()
n = len(api.listAllPackages())
print("Number of packages on pypi.org:", n)

此模块还提供下载有关特定软件包信息的功能,如 pypi.org 所提供的:

import jk_pypiorgapi
import jk_json

api = jk_pypiorgapi.PyPiOrgAPI()
jData = api.getPackageInfoJSON("jk_pypiorgapi")
jk_json.prettyPrint(jData)

此功能也可能有用。

答案 3 :(得分:1)

我尝试了this answer,但无法在Python 3.6上运行

我找到了一种使用lxml包进行HTML解析的解决方案,但是您必须通过pip命令将其安装为

pip install lxml


然后,尝试以下代码段

from lxml import html
import requests

response = requests.get("https://pypi.org/simple/")

tree = html.fromstring(response.content)

package_list = [package for package in tree.xpath('//a/text()')]

答案 4 :(得分:0)

这是Bash的一线:

curl -sG -H 'Host: pypi.org' -H 'Accept: application/json' https://pypi.org/pypi/numpy/json | awk -F "description\":\"" '{ print $2 }' |cut -d ',' -f 1

# NumPy is a general-purpose array-processing package designed to...