是的,我对这个问题非常认真。点子搜索如何工作?
关键字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如何精确地执行搜索?在哪里可以找到合适的参考书?
答案 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个结果限制。