pip search 已被永久移除,因 PyPI 自2021年起彻底关闭XML-RPC接口;替代方案包括:pip index versions(查精确包名及版本)、curl或Python调用PyPI JSON搜索接口、第三方工具如pip-search(不稳定)或pypi-simple(仅包名列表)。
pip search 已被官方禁用,且没有计划恢复——这不是临时故障,而是永久性移除。根本原因是 PyPI 服务端不再提供 XML-RPC 接口(pip search 依赖的 search 方法),客户端调用会直接报错 XMLRPC::TransportError 或 Connection refused。
PyPI 自 2020 年起逐步下线 XML-RPC 支持,2021 年彻底关闭。所有基于该协议的客户端行为(包括 pip search)均失效。这不是 pip 版本问题,升级到最新版 pip 后仍会报错:
ERROR: Command "search" is not available.
背后是安全与维护成本考量:XML-RPC 接口难以审计、易受滥用,且无法支撑现代搜索需求(如关键词相关性、包元数据过滤)。
如果你只是想确认某个包是否存在、或查看它的所有发布版本,pip index versions 是最轻量级替代(pip ≥ 21.3):
立即学习“Python免费学习笔记(深入)”;
pip index versions <package_name>
pip index versions requests 会列出所有 requests 的版本号(含 yanked 版本)注意:它不返回包简介、作者、关键词等信息,仅用于“这个包有没有?有哪些版本?”这类验证场景。
需要真正“搜索关键词”(比如找“csv parser”相关包),就得绕过 pip,直连 PyPI 的公开 JSON 接口:
https://pypi.org/pypi/<strong>{query}</strong>/json/ —— 适用于已知包名https://pypi.org/search/?q=<strong>{query}</strong>,但返回的是 HTML,解析麻烦curl 调 PyPI 的实验性 JSON 搜索接口(非官方文档,但稳定可用):curl -s "https://pypi.org/search/?q=click&page=1" | grep -o 'href="/project/[^"]*"' | head -5
https://pypi.org/pypi?%3Aaction=search&term=xxx(旧 CGI 接口,仍可返回 XML,但需手动解析)实际开发中,建议封装成小函数,例如用 requests GET https://pypi.org/simple/ 列表(仅包名)+ 本地关键词过滤,速度慢但零依赖。
社区有维护几个替代 CLI 工具,但要注意它们的局限性:
pip install pip-search:基于爬取 PyPI 搜索页 HTML,容易因页面结构变更而失效,常报 AttributeError: 'NoneType' object has no attribute 'text'
pip install pypi-simple:提供 pypi-simple list,只返回全量包名(约 60 万行),适合 grep,不适合关键词检索这些工具能应急,但别写进 CI/CD 流程——它们没 SLA,也没版本锁定机制。
真正要实现类似 pip search 的体验,得接受一个事实:PyPI 官方不提供轻量级搜索 API。能做的只有折中——要么用精确包名查版本(pip index versions),要么自己搭简易索引(定期拉取 https://pypi.org/simple/ + 下载部分 JSON 元数据做本地搜索)。搜索本身不是难事,难的是让结果足够准、更新足够快、还不出错。