pip search 和 pip install 出现错误

M-A*_*oid 34 pip python-3.x

嗨,大约两天后我收到此错误:

错误:XMLRPC 请求失败 [代码:-32500] 运行时错误:由于无法管理的负载,PyPI 的 XMLRPC API 目前被禁用,将在不久的将来弃用。有关更多信息,请参阅https://status.python.org/

我从一些人问,搜查了很多,但我din't kbow是什么问题以及如何解决它我tryed apt update,并python3 pip install --upgrade pip通过PIP本身我在使用Android的PIP Termux是工作了一段日前建议...

小智 41

可悲的pip search是现在被python.org永久禁止。
他们表示,他们在 100 天内(自 2020 年 11 月 14 日起)经历了“每小时数十万次搜索调用”,并且在发生这种情况之前,已经确定不推荐使用用于搜索调用的 XMLRPC API .
所以也许我们需要直接在pypi.org上搜索包,或者转向像pypi-simple-searchpipsearch 这样的包

  • 如果禁令是永久性的,则应更改错误消息以说明这一点。当前的消息完全没有帮助,因为它指向一个暗示一切正常的页面。如果天真的/休闲用户指向解决方案或像 pip-search [链接] 这样的解决方案(https://www.dark-hamster.com/application/how-to-solve-error-message) -错误-xmlrpc-请求失败-代码-32500-执行-pip-搜索/) (16认同)
  • 难道他们不应该从“pip”中删除“search”子命令吗? (13认同)
  • @Meysam 对于持久的行业标准工具,您首先发出弃用警告(可能在实际弃用之前几年)。你不只是去移除东西。 (4认同)
  • @MindaugasBernatavičius 但这不是弃用警告。由于 API 被禁用,“search”子命令实际上已被弃用。该警告只是告诉您那里有一个子命令。 (4认同)
  • 这在 *The Register* 中有介绍:https://www.theregister.com/2021/05/25/pypi_search_error/ (2认同)
  • @MindaugasBernatavičius 哈哈,但他们只是继续在服务器端将其删除到 Meysam 的观点。如果您打算这样做,那么您不妨删除 pip search 子命令。这与显然仍然具有搜索子命令的旧版本不同。目前的处理方式完全没有意义。 (2认同)

小智 5

如果您点击链接,在上次更新中他们指出 XMLRPC API 已被禁用(由于流量过大)。该方法pip search目前已被禁用。上次更新是一个月前发布的,我看不到任何变化。

  • 这意味着我们“全部”被禁止。:( (8认同)

Dor*_*ian 5

对于基于包名称模式的搜索,我在下面分享这个脚本,希望您发现它有用。

#!/bin/bash
# pypi-search.sh 
# This script fetch data from https://pypi.org/simple/ 
# process the output for simple package name output with perl
# and then apply a regex pattern to the result

pypiurl=https://pypi.org/simple/
currentdate=$(date +%y%m%d)

cachedir=~/.cache/simple-pypi
[[ -d $cachedir ]] || mkdir -p $cachedir

cachefile=$(ls -1 $cachedir/*_simple-pypi.html 2>/dev/null | sort | head -n1)
[[ $cachefile = "" ]] && cachefile=$cachedir/"${currentdate}_simple-pypi.html"

searchpattern="$1"
cmd="$2"

if [[ -f $cachefile ]] ; then
    dbdate=$(echo $cachefile | grep -Po "[0-9]{6,6}")
    # if db is older than 3 days or second parameter is 'update'
    ( (( ($currentdate - $dbdate) > 3 )) || [[ "x$cmd"  = 'xupdate' ]] ) && {
        echo "last update was on : $dbdate"
        cachefile=$cachedir/"${currentdate}_simple-pypi.html"
        wget -q --show-progress -O - $pypiurl > $cachefile
    }
else
    wget -q --show-progress -O - $pypiurl > $cachefile
fi

[[ x$searchpattern = "x" ]] && read -p "Enter pypi name pattern : " searchpattern
perl -pe 's/.*([\/"]{1,1}\>){1,1}([^>]+(.*)[^<])+\<\/a\>/\2/g' $cachefile | grep -P "$searchpattern"
Run Code Online (Sandbox Code Playgroud)

用法:pypi-search.sh ^pip$