程序运行之前需要验证是否安装。
答案1
您应该将pip
'slist
命令与 grep 一起使用,该命令仅列出已安装的软件包(并非所有模块及其邻居):
pip list | grep -F package_name
如果 package_name 与多个已安装的软件包匹配,例如搜索“boto
何时botocore
也安装”,则使用-w
而不是-F
可以帮助,如 @TaraPrasadGurung 建议的那样。这没有列出确切的包,因为-w
将包名称中常见的字符视为单词边界。因此,如果您已经 requests
安装requests-cache
或ruamel.yaml
ruamel.yaml.cmd` 并且需要恰好一行输出你需要做类似的事情:
pip list --disable-pip-version-check | grep -E "^ruamel\.yaml "
请注意,由于.
使用时匹配任何字符-E
,因此您需要对其进行转义。
是的,这是必要的,因为有一个包ruamel_yaml
. 并非每个包管理器pip
在处理命名空间包时都兼容。
答案2
如果包在导入时没有做一些疯狂或耗时的事情,您可以尝试实际导入它:
if python -c "import package_name" &> /dev/null; then
echo 'all good'
else
echo 'uh oh'
fi
答案3
使用 pip3 测试:
$> pip3 show MODULENAME
如果安装了模块,退出代码 ($?) 将为“0”,否则为“1”。
Grepping 存在“误报”问题:a 的输出
pip list | grep NAME
将匹配名称包含“NAME”的任何模块,例如也匹配“some_other_NAME”。
尽管
pip3 show MODULENAME
仅匹配完整匹配。
答案4
我发现现有的答案不完整并且缺乏足够好的例子。这是我已经确定的解决方案:
# 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
可以在此处找到此示例的 Github 要点:https://gist.github.com/shaypal5/d505af9953cd86f59c750fa600ee4ba6