python - 如何使用 pip 进行搜索?

标签 python search pip pypi

是的,我对这个问题非常认真。如何使用 pip 进行搜索?

关键字 search 的文档引用了 https://pip.pypa.io/en/stable/user_guide/#searching-for-packages 中的“pip 搜索引用” 什么都不是引用。

我无法从搜索尝试中得出结论,搜索是如何工作的。例如。如果我搜索“exec”,我会得到各种各样的结果,例如 exec-pypeline (0.4.2) - an incredible python package。只要描述中包含术语“exec”,我什至会得到与“exec”无关的包名称的结果。

但奇怪的是,尽管其中一个包的名称中包含 exec,但我没有在列表中看到我自己的包之一。现在仅此一 pip 就可以使我们得出结论,即 pip(至少)在包描述(我的包没有)中搜索完整的搜索词。

但是如果我搜索包描述中提供的其他术语,那么基于该假设我也不会列出我的包。这也适用于其他包:例如如果我搜索“projects”,我不会在结果集中得到 flask-macros,尽管术语“projects”显然存在于 flask-macros 的描述中。因此,由于这与上述假设相矛盾,这显然不是搜索的工作方式。

有趣的是,我可以搜索“macro”并得到“flask-macros”作为结果,但如果我搜索“macr”,则找不到“flask-macros”。

那么 pip 究竟是如何进行搜索的呢?在哪里可以找到合适的引用资料?

最佳答案

pip search 查找分发名称分发摘要中包含的子字符串。我在任何地方都看不到这个记录,并按照 the source code 中的命令找到了它。直接。

搜索功能的代码(日期为 2010 年 2 月)仍在使用旧的 xmlrpc_client。有 issue395要更改此设置,自 2011 年起开放,因为 XML-RPC API 现在是 considered legacy and should not be used .有 pip 令人惊讶的是,端 pip 在 pypi-legacy 到仓库的移动中没有被弃用,因为 legacy routes are still there .

flask-macros 没有出现在“project”的搜索中,因为这是一个太常见的搜索词。仅返回 100 个结果,this is a hardcoded limit in the elasticsearch view它处理对那些 PyPI 搜索路由的请求。请注意,这是最近在 PR3827 中从 1000 减少的。 .

直接使用 API 客户端进行搜索的代码:

import xmlrpc.client

client = xmlrpc.client.ServerProxy('https://pypi.org/pypi')
query = 'project'
results = client.search({'name': query, 'summary': query}, 'or')
print(len(results), 'results returned')
for result in sorted(results, key=lambda data: data['name'].lower()):
    print(result)

编辑:现在记录了 100 个结果限制 here .

关于python - 如何使用 pip 进行搜索?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51269053/

相关文章:

c++ - 任何用于测试 4 是否在 [1,2,3,4]( vector )中的内置函数

django - 在 EC2 上的 Virtualenv 中运行 Django -- ImportError : No module named django. core.management

python - pip list 和 sudo pip list 显示不同的包版本

搜索 mvc 保持同一页面

android - 带有搜索输入法选项的 AutoCompleteTextView

python - 如何在 pandas 中将 '1:30:20' 字符串转换为时间格式

python - 在 Python 中从 C++ 继承 Base,使用 SWIG 调用抽象方法

python-3.x - PIP/Python 是否支持同一个包的多个版本?

python - 导入 nltk 包时如何解决以下错误

计算列表内成对点积的 Pythonic 方法