Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PyPi的JSON API-如何列出包?_Json_Api_Pypi - Fatal编程技术网

PyPi的JSON API-如何列出包?

PyPi的JSON API-如何列出包?,json,api,pypi,Json,Api,Pypi,有一个允许获取包数据的方法: http://pypi.python.org/pypi/<package_name>/json http://pypi.python.org/pypi/<package_name>/<version>/json http://pypi.python.org/pypi//json http://pypi.python.org/pypi///json 但是,是否可以通过get调用获取所有PyPI包(或最近的包)的列表?最简单的方法

有一个允许获取包数据的方法:

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

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

最简单的方法是使用列出所有包而无开销的。然后,您可以通过对问题中提到的URL执行GET请求来分别请求每个包的JSON。

我知道您要求通过JSON API实现这一点,但您可以使用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()
我试过了,但它在Python 3.6上不起作用 我发现了一个通过使用包进行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()')]

下面是Bash one liner:

curl-sG-H'Host:pypi.org'-H'Accept:application/json'https://pypi.org/pypi/numpy/json |awk-F“description\”:\“{print$2}”| cut-d','-f1
#NumPy是一个通用阵列处理包,旨在。。。

注意:为了简化这样的任务,我实现了自己的Python模块。可以使用
pip
安装:

pip install jk_pypiorgapi
该模块使用非常简单。实例化表示API接口的对象后,可以使用它:

导入jk_pypiorgapi
api=jk_pypiorgapi.pypiorgapi()
n=len(api.listAllPackages())
打印(“pypi.org上的包数:”,n)
此模块还提供下载由
pypi.org
提供的特定软件包信息的功能:

导入jk_pypiorgapi
导入jk_-json
api=jk_pypiorgapi.pypiorgapi()
jData=api.getPackageInfoJSON(“jk_pypiorgapi”)
jk_json.prettyPrint(jData)

此功能可能也有帮助。

是您要查找的网页吗?@vaibhaw不,不是json。它有我需要的数据,但是在获取和解析数据时有一些开销。我以为您正在查找所有包的列表。有没有办法通过简单/JSON API通过包前缀或片段(例如
lxm
->lxml、lxml包装等)来搜索PyPI?XML-RPC API提供了一个搜索,但显然它被弃用了:(谢谢!(在我解析之前,它的数据传输开销很大。)因为,该页面的顶部说:PyPI的XMLRPC接口被认为是遗留的,不应该使用..这对我有效-python版本3.6.6-日期为2019年1月17日。对于软件包版本,您可以使用-client.package_releases几天前,PyPI已禁用此模式。orgThis似乎在2021年5月11日仍然有效。谢谢!我必须安装一些未声明的依赖项才能使其正常工作:
pypine
jk_cmdoutputparsinghelper
invoke
jk_version
。我也看了一下你漂亮的打印机。非常好!谢谢你的评论,我很快就会提供更新。顺便说一句:pypine是我现在正在进行的一个新项目:构建和Python中的数据处理框架,很快就会开源。但是jk_Pypiorgapi不应该对它有依赖关系。我会很快进行调查。如果您遇到任何问题,请在GitHub上提交错误报告。谢谢!@RogerDahl已修复。您可能想要更新。但是,我有点困惑:应该不需要jk_cmdoutputparsinghelper和jk_版本作为这两个模块不被jk_pypiorgapi使用。如果您想提供帮助,请在安装更新后再次检查,如果此依赖项仍然存在,请在GitHub repo页面上提交错误报告。谢谢!只需重新安装venv,安装
jk_pypiorgapi
,然后尝试代码片段。您应该会得到缺少的代码事实上,A试图找到一种查询PyPI以获取依赖信息的方法,后来发现这些信息并没有被当前的PyPI API公开。@RogerDahl:这并不像你想象的那么容易。因为我正在构建系统工具,所以我在系统级安装了许多自行编写的软件包。我需要擦除系统的一半m来测试这个。因此我只是直接看了一下所有的包:在这种情况下,没有那么多的文件,所以这很容易,我消除了对pypine的依赖。其他依赖项无论如何都不应该被使用,jk_pipyorgapi也不应该被它的依赖项使用。不过,我将很快建立一个特殊的测试机来消除关于依赖关系的任何未来不便。