Ant*_*hon 17

您应该将pip'slist命令与 grep 一起使用,该命令仅列出已安装的软件包(并非所有模块及其邻居):

pip list | grep -F package_name
Run Code Online (Sandbox Code Playgroud)

如果 package_name 匹配多个已安装的包,例如搜索boto何时botocore也安装了,那么使用-w代替-F可以帮助,正如@TaraPrasadGurung 建议的那样。这没有列出确切的包,因为-w将包名称中常见的字符视为单词边界。因此,如果您已经 安装requestsrequests-cache安装了 orruamel.yaml和 ruamel.yaml.cmd` 并且只需要一行输出,则需要执行以下操作:

pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
Run Code Online (Sandbox Code Playgroud)

请注意,由于.在使用时匹配任何字符-E,因此您需要对其进行转义。¹


¹是的,这是必要的,因为有一个包ruamel_yamlpip在处理命名空间包时,并非每个包管理器都兼容。


小智 8

使用 pip3 测试:

$> pip3 show MODULENAME
Run Code Online (Sandbox Code Playgroud)

如果安装了模块,退出代码 ($?) 将为“0”,否则为“1”。

Grepping 存在“误报”问题:a 的输出

pip list | grep NAME
Run Code Online (Sandbox Code Playgroud)

将匹配名称包含“NAME”的任何模块,例如也匹配“some_other_NAME”。

尽管

pip3 show MODULENAME
Run Code Online (Sandbox Code Playgroud)

仅匹配完整匹配。


maz*_*azs 6

在外壳中输入:pydoc modules.
这将列出模块,您可以 grep 所需的模块。
此处的stackoverflow 上找到


小智 6

如果包在导入时没有做一些疯狂或耗时的事情,您可以尝试实际导入它:

if python -c "import package_name" &> /dev/null; then
    echo 'all good'
else
    echo 'uh oh'
fi
Run Code Online (Sandbox Code Playgroud)


小智 5

我发现现有的答案不完整并且缺乏足够好的例子。这是我已经确定的解决方案:

# an example checking if the pandas package is installed
if python -c 'import pkgutil; exit(not pkgutil.find_loader("pandas"))'; then
    echo 'pandas found'
else
    echo 'pandas not found'
fi
Run Code Online (Sandbox Code Playgroud)

此示例的 Github 要点可在此处找到: https: //gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6