我正在研究用于管理Python虚拟环境的GUI。到目前为止,我能够实施我想要提供给用户的最大功能。但是我坚持一件事:
创建虚拟环境时,用户可以根据需要安装软件包。为此,我想让他们从命令行执行像pip search <package>
这样的搜索。结果将显示在表视图中。我的问题是,我不确定获得搜索结果的最佳方法是什么。
我尝试使用内置模块subprocess
,并进行了pip search
来填充结果。这是可能的,但是这是棘手的,因为我必须先格式化输出(软件包名称,版本,描述(才能适合表。
因为为此,我需要很多嵌套的循环和字符串操纵,所以我寻找了一种直接访问数据的方法,理想情况下而无需刮擦Python软件包索引。
编辑:
我考虑使用PYPI的XML-RPC API,但有一个注释,将来会弃用它,不建议使用,因此我不确定是否应该在项目中使用它。
XML-RPC API将来会被弃用。不建议使用此API,API的现有消费者应迁移到RSS和/或JSON API。
强烈鼓励此API的用户在开始从PYPI中删除XML-RPC的过程。
是否有另一种方法可以从PYPI获得搜索结果,还是XML-RPC API目前唯一的方法?RPC搜索端点在2020年12月中旬暂时被禁用,这是因为搜索端点的请求加载不断增加。截至目前,目前无法使用API在pypi.org上搜索包。
您可以使用PYPI的XML的search
方法-RPC API,这是pip
用于pip search
的用途。
没有等效的JSON API用于搜索,但是有计划添加一个。
强调antti haapala anwser:
- 截至1月。2020,https://status.python.org提供了一些有关正在进行的PIP错误的有意义的信息。请参阅下面的报价。
- 任何执行
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 UTC
更新 - 由于持续的请求卷,XMLRPC搜索端点仍将禁用。在此更新时,滥用IP的入站流量并没有减少到端点,我们无法重新启用端点,因为这会立即导致PYPI服务再次降级。
12月28日,13:50 UTC
更新 - 由于持续的请求卷,XMLRPC搜索端点仍被禁用。在此更新时,滥用IPS的入站流量并没有减少到终点,我们无法重新启用端点,因为这会立即导致PYPI服务再次降解。我们正在与IPS所有者的滥用联系人合作,并试图通过其他渠道与我们的维护者联系。
12月23日,14:54 UTC
更新 - 由于持续的请求卷,XMLRPC搜索端点仍被禁用。在此更新时,滥用IPS的入站流量并没有减少到终点,我们无法重新启用端点,因为这会立即导致PYPI服务再次降解。我们正在与IPS所有者的滥用联系人合作,并试图通过其他渠道与我们的维护者联系。
12月15日,20:59 UTC
监视 - XMLRPC的临时残疾,我们希望造成我们麻烦的大众消费者能够联系。由于IPS的巨大片段,我们无法在不风险更严重的破坏的情况下实现更有针对性的障碍,并且无法在可行的时间范围内收到他们的滥用联系或直接推广的回应。
12月14日17:46 UTC
更新 - 由于入站XMLRPC搜索请求的压倒性激增(和增长(,我们将暂时禁用XMLRPC搜索端点,直到进一步通知为止。
12月14日17:30 UTC
确定的 - 我们已经确定,问题与我们的XLMRPC搜索端点相比,该端点为
pip search
和其他工具提供了动力。我们正在努力识别模式并禁止虐待客户保留服务健康。12月14日,15:09 UTC
调查 - PYPI的搜索后端正在经历中断,导致后端超时和失败,从而导致Web应用程序的服务退化。上传和安装当前不受影响,但通过Web应用程序登录并通过XMLRPC访问API访问的操作和搜索。
12月14日,09:41 UTC