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将包名称中常见的字符视为单词边界。因此,如果您已经 安装requests并requests-cache安装了 orruamel.yaml和 ruamel.yaml.cmd` 并且只需要一行输出,则需要执行以下操作:
pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
Run Code Online (Sandbox Code Playgroud)
请注意,由于.在使用时匹配任何字符-E,因此您需要对其进行转义。¹
¹是的,这是必要的,因为有一个包ruamel_yaml。pip在处理命名空间包时,并非每个包管理器都兼容。
小智 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)
仅匹配完整匹配。
小智 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