如何仅根据名称搜索pip软件包?

19

默认情况下,pip会同时搜索软件包名称和描述。对于某些软件包来说,这会导致大量的虚假匹配结果,找到我实际想要的那个软件包非常麻烦。

我该如何告诉pip我只想按名称搜索呢?


4
在Linux上,您可以执行以下操作:pip search numpy | awk '{ print $1 }' | grep numpy - ziky
但是你可以使用 yolk -S name=package_name - Sergey Panfilov
1
@ziky 更好的方式是: pip search numpy | awk '$1 == "numpy"' - wjandrea
2个回答

10
目前不可能,因为当前实现(pip 8.1.1)在 pip 搜索命令中使用了硬编码的 name OR summary 查询 (链接1),尽管 PyPI XML RPC 支持不同的查询。

2
它在pip 10.0版本中仍然是如此 https://github.com/pypa/pip/blob/master/src/pip/_internal/commands/search.py#L65 - Sergey Panfilov

9
在Linux/OSX上,使用一些grep/egrep(在OSX上需要使用egrep进行正则表达式匹配,而Linux则不需要)半手动地完成某些操作并不难。
下面的搜索返回了很多内容(如果通过管道传递到wc,则实际上有41个)。 pip search psycopg
输出的前几行如下:
gevent-psycopg2 (0.0.3)              - pip-installable package for patching psycopg2 to use gevent
django-psycopg2-pool (0.1.1)         - A db backend for Django using the gevent psycopg2-pool
pg4nosql (0.4.2)                     - A simple psycopg2 based wrapper for nosql like database interaction with python.
zope.psycopgda (1.1.1)               - Psycopg Database Adapter for Zope 3
qmarkpg (0.2)                        - A psycopg2 wrapper using the qmark parameters style

但是,如果您查看pip输出,您会发现packaname字段往往以版本名称结尾 - psycopg (1.1.21)

因此,应写为:

pip search psycopg | egrep "^.*psycopg.*\("

输出结果:

gevent-psycopg2 (0.0.3)              - pip-installable package for patching psycopg2 to use gevent
django-psycopg2-pool (0.1.1)         - A db backend for Django using the gevent psycopg2-pool
zope.psycopgda (1.1.1)               - Psycopg Database Adapter for Zope 3
psycopg2-managed-connection (1.0.0)  - Thread-safe connection manager for psycopg2 connections.
db-psycopg2 (0.0.7)                  - psycopg2 driver for db
kr-impatient-psycopg2 (2.5.2.dev0)   - Python-PostgreSQL Database Adapter
tornado-psycopg2 (0.3.1)             - Tornado driver for support asynchronous mode for psycopg2.
psycopg2 (2.6.1)                     - psycopg2 - Python-PostgreSQL Database Adapter
psycopg2-dateutils (0.1)             - Use dateutils.relativedelta to represent PostgreSQL interval types
psycopg2ct (2.4.4)                   - An implementation of the psycopg2 module using ctypes.
psycopgwrap (1.05)                   - A wrapper around psycopg2 to make common things easier.
psycopgda (1.0)                      - Psycopg Database Adapter for Zope 3
psycopg-postgis (0.1.1)              - Pyscopg helpers to work with PostGIS.
psycopg2cffi (2.7.2)                 - .. image:: https://travis-ci.org/chtd/psycopg2cffi.svg?branch=master
psycopg2cffi-compat (1.1)            - A Simple library to enable psycopg2 compatability
little_pger (0.65)                   - A thin layer just a tad above SQL, for use with PostgreSQL and psycopg2, when you want to wrap queries in a convenient way, using plain data structures (but you don't feel like using an ORM, for some reason).
psycopg (1.1.21)                     - Python-PostgreSQL Database Adapter
psycopg2da (2.0.9)                   - Python psycopg2 database adapter for Zope

假设包名中没有括号。

作为可重用的bash函数(放置在.profile或类似位置):

pipsearchpackagename(){
    #a bash function.
    pip search $1 | egrep "^.*"$1".*\("
}

1
此外,当您需要搜索软件包的确切名称时,可以使用类似于 pip search psycopg | egrep "^psycopg\ " 的命令(以查询字符串开头且不包含任何空格)。 - David Jung

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接