JSON API for PyPi -如何列出包?

e5njpo68  于 2023-05-30  发布在  其他
关注(0)|答案(7)|浏览(283)

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

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

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

fcg9iug3

fcg9iug31#

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

cgfeq70w

cgfeq70w2#

我知道你想通过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()
np8igboo

np8igboo3#

我试过this answer,但在Python 3.6上不起作用
我发现一个解决方案与HTML解析使用lxml包,但你必须安装它通过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()')]
aurhwmvo

aurhwmvo4#

注意:为了使这样的任务变得简单,我实现了自己的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)

这个功能可能也有帮助。

06odsfpq

06odsfpq5#

PEP 691开始,如果您请求JSON响应,您现在可以通过Simple API获取它。

curl --header 'Accept: application/vnd.pypi.simple.v1+json' https://pypi.org/simple/ | jq
omjgkv6w

omjgkv6w6#

现在这完全可以在requests中实现。所请求的内容类型(JSON的mime类型)只需要进入头部字典。`requests'甚至可以将json解码为另一个dict:

r = requests.get(f'https://pypi.org/pypi/{package_name}/json', headers = {'Accept': 'application/json'});

info = r.json()['info']
print(f"requested package name = {package_name}, stored name: {info['name']}, author: {info['author']}, version: {info['version']}, license: {info['license']}")
mzsu5hc0

mzsu5hc07#

下面是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...

相关问题