【问题标题】:Is there a way to access search results from PyPI without scraping?有没有办法从 PyPI 访问搜索结果而无需抓取?
【发布时间】:2019-12-06 02:25:59
【问题描述】:

我正在开发一个用于管理 Python 虚拟环境的 GUI。到目前为止,我能够实现我想提供给用户的大部分功能。但我坚持一件事:

在创建虚拟环境时,用户可以根据需要将软件包安装到其中。为此,我想让他们从命令行执行类似pip search <package> 的搜索。结果将显示在表格视图中。我的问题是我不确定获取搜索结果的最佳方式是什么。

我尝试使用内置模块subprocess 并使用pip search 将结果填充到表格中。这是可能的,但它很棘手,因为我必须先格式化输出(包名称、版本、描述)以适合表格。

因为这需要大量嵌套循环和字符串操作,所以我寻找了一种直接访问数据的方法,最好是无需抓取Python Package Index


编辑:

我考虑过使用 PyPI 的 XML-RPC API,但是有一个说明,它在未来会被弃用,不推荐使用,所以我不确定是否应该在我的项目中使用它。

XML-RPC API 将来会被弃用。不建议使用此 API,该 API 的现有使用者应迁移到 RSS 和/或 JSON API。

强烈建议此 API 的用户订阅 pypi-announce 邮件列表以获取通知,因为我们开始从 PyPI 中删除 XML-RPC。

是否有其他方法可以从 PyPI 中获取搜索结果,或者目前只有 XML-RPC API 吗?

【问题讨论】:

标签: python python-3.x pip pypi


【解决方案1】:

XML-RPC 搜索端点在 2020 年 12 月中旬被暂时禁用,因为搜索端点的请求负载不断增加。到目前为止,目前根本无法使用 API 在 pypi.org 上搜索包。

【讨论】:

  • 它在 2021 年 3 月 24 日被永久禁用,因为即使在被禁用后,一些第三方(第三方?)在它被暂时禁用后的 100 天甚至 100 天仍然继续滥用它。所以这就是为什么我们不能拥有美好的事物。很伤心。
【解决方案2】:

您可以使用 PyPI 的 XML-RPC APIsearch 方法,这就是 pip 用于 pip search 的方法。

没有用于搜索的等效 JSON API,but there are plans to add one

【讨论】:

  • 可以,但是无法通过 JSON API 查询搜索索引。
  • 没错,这就是问题所在。所以,现在我将使用 XML-RPC API。
【解决方案3】:

强调Antti Haapala anwser:

  • 截至 1 月。 2020,https://status.python.org 提供了一些有关持续点差的有意义的信息。请参阅下面的引文。
  • 任何执行pip search(使用 pip 20.3.3 测试)命令的人都可能遇到以下错误消息: xmlrpc.client.Fault: <Fault -32500: "RuntimeError: PyPI's XMLRPC API has been temporarily disabled due to unmanageable load and will be deprecated in the near future. See https://status.python.org/ for more information.">
  • pip install your_package 仍然有效

另见https://stackoverflow.com/a/65485498/7237062


上述错误信息的一个重要部分是(巨大的粗体强调我的):

PyPI 的 XMLRPC API [...] 将在不久的将来被弃用


引用https://status.python.org: (我不打算进一步更新这篇文章,只是提供一些上下文。)

更新 - 我们将继续监控任何进一步的问题。

世界标准时间 12 月 28 日 13:51

更新 - 由于持续的请求量,XMLRPC 搜索端点保持禁用状态。截至本次更新,来自滥用 IP 的端点的入站流量没有减少,我们无法重新启用端点,因为这会立即导致 PyPI 服务再次降级。

世界标准时间 12 月 28 日 13:50

更新 - 由于持续的请求量,XMLRPC 搜索端点仍然被禁用。截至本次更新,从滥用 IP 到端点的入站流量没有减少,我们无法重新启用端点,因为它会立即导致 PyPI 服务再次降级。我们正在与 IP 所有者的滥用联系人合作,并尝试与通过其他渠道充斥我们的​​任何工具的维护者取得联系。

世界标准时间 12 月 23 日 14:54

更新 - 由于持续的请求量,XMLRPC 搜索端点仍然被禁用。截至本次更新,从滥用 IP 到端点的入站流量没有减少,我们无法重新启用端点,因为它会立即导致 PyPI 服务再次降级。我们正在与 IP 所有者的滥用联系人合作,并尝试与通过其他渠道充斥我们的​​任何工具的维护者取得联系。

世界标准时间 12 月 15 日 20:59

监控 - 随着 XMLRPC 的暂时禁用,我们希望给我们带来麻烦的大众消费者能够联系。由于 IP 数量众多,我们无法在不冒更严重中断风险的情况下进行更有针对性的屏蔽,也无法在可操作的时间范围内收到他们的滥用联系人或直接外联人员的回复。

世界标准时间 12 月 14 日 17:46

更新 - 由于入站 XMLRPC 搜索请求的激增(并且还在增长),我们将暂时禁用 XMLRPC 搜索端点,直至另行通知。

世界标准时间 12 月 14 日 17:30

已确定 - 我们已确定问题出在支持 pip search 以及其他工具的 XLMRPC 搜索端点的容量过大。我们正在努力找出模式并禁止滥用客户以保持服务健康。

世界标准时间 12 月 14 日 15:09

正在调查 - PyPI 的搜索后端遇到中断,导致后端超时和失败,从而导致 Web 应用程序的服务质量下降。上传和安装当前不受影响,但通过 Web 应用程序登录的操作和搜索以及通过 XMLRPC 的 API 访问当前遇到部分中断。

世界标准时间 12 月 14 日 09:41

【讨论】:

    猜你喜欢
    • 2017-04-02
    • 1970-01-01
    • 2022-10-13
    • 2022-01-01
    • 2020-11-17
    • 2011-01-27
    • 1970-01-01
    • 1970-01-01
    • 2021-06-28
    相关资源
    最近更新 更多