【问题标题】:How does searching with pip work?使用 pip 进行搜索是如何工作的?
【发布时间】:2018-12-18 12:36:18
【问题描述】:

是的,我对这个问题很认真。使用 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(至少)会在包描述(我的包没有)中搜索完整的搜索词。

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

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

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

【问题讨论】:

  • 与此相关的一个(可能更多)方面:我刚刚发现该网页列出了术语“日志记录”的至少 9300 个条目。有趣的是pip 只返回了大约 100 个。难道pip 只是忽略了搜索提供的大部分包?
  • 不是你的问题,但qypi 看起来是pip search 的合理替代方案:一种真正的查询语言、json 输出、编写良好的文档。

标签: python search pip pypi


【解决方案1】:

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

搜索功能的代码可追溯到 2010 年 2 月,仍在使用旧的 xmlrpc_client。有 issue395 来改变这一点,自 2011 年起开放,因为 XML-RPC API 现在是 considered legacy and should not be used。有点令人惊讶的是,端点并没有在 pypi-legacy 到仓库的移动中被弃用,如 legacy routes are still there

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)

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

【讨论】:

  • 如果是这种情况,如果我搜索project,应该会找到包flask-macros。哪个不是。如果是这种情况,搜索simpleexec 将返回我的一个包。它没有。如果我搜索macr,则不会返回包flask-macros。请参阅我上面的问题。这就是我问的原因。
  • 慢慢来。
  • 没有记录仅返回 100 个结果。
  • 我知道它没有记录。但经过测试:github.com/pypa/warehouse/blob/…
  • @RegisMay 在 github 上 ping 了项目维护人员,他们已经just updated the docs
猜你喜欢
  • 2021-03-26
  • 2021-05-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-19
  • 2013-06-26
  • 2016-05-31
相关资源
最近更新 更多