点子搜索如何工作?

时间:2018-07-10 15:26:15

标签: python search pip pypi

是的,我对这个问题非常认真。点子搜索如何工作?

关键字search的文档引用了https://pip.pypa.io/en/stable/user_guide/#searching-for-packages上的“点子搜索参考”,除了参考之外,其他所有内容。

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

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

但是,如果以此为基础,如果我搜索包装说明中提供的其他术语,我的包装也不会列出。这也适用于其他软件包:如果我搜索“项目”,尽管flask-macros的描述中显然存在“项目”一词,但结果集中没有得到flask-macros。因此,与上述假设相矛盾的是,这显然不是搜索工作的方式。

有趣的是,我可以搜索“宏”并得到“烧瓶宏”,但是如果我搜索“宏”,则找不到“烧瓶宏”。

那么pip如何精确地执行搜索?在哪里可以找到合适的参考书?

1 个答案:

答案 0 :(得分:2)

pip search查找包含在分发名称分发摘要中的子字符串。我在任何地方都看不到此文档,而是直接按照the source code中的命令找到它的。

自2010年2月以来的搜索功能代码仍在使用旧的xmlrpc_client。由于XML-RPC API现在为issue395,因此自2011年以来开放的considered legacy and should not be used进行了更改。出乎意料的是,端点在legacy routes are still there中的仓库迁移的pypi版本中并没有被弃用。

flask-macros未出现在对“项目”的搜索中,因为这在搜索词中太常见了。仅返回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)

编辑:现在已记录here的100个结果限制。