如何检查python3中是否已经安装了模块或包?

如何检查python3中是否已经安装了模块或包?

程序运行之前需要验证是否安装。

答案1

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

pip list | grep -F package_name

如果 package_name 与多个已安装的软件包匹配,例如搜索“boto何时botocore也安装”,则使用-w而不是-F可以帮助,如 @TaraPrasadGurung 建议的那样。这没有列出确切的包,因为-w将包名称中常见的字符视为单词边界。因此,如果您已经 requests安装requests-cacheruamel.yamlruamel.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

相关内容