如何检查 Python 中是否安装了某个模块,并在需要时安装它?

如何检查 Python 中是否安装了某个模块,并在需要时安装它?

在终端中,启动 Python 后,我如何知道 Python 中存在哪些模块?假设我需要学习 NumPy 和 SciPy 模块。

  • 如果未安装该如何安装?
  • 我如何知道它是否已安装?

答案1

如何知道系统中是否安装了python模块:您可以在终端中进行一个非常简单的测试,

$ python -c "import math"
$ echo $?
0                                # math module exists in system

$ python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1                                # numpy module does not exist in system

如果没有安装该如何安装

您可以通过从存储库下载相应的软件包来安装特定模块,例如,您可以安装scipy作为,

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

交替python-pip您还可以按照 Zack Titan 的建议安装 Python 模块在下面评论,要安装,numpy您可以使用

pip install numpy

警告:强烈建议仅使用官方 Ubuntu 存储库安装 python-modules,而不要使用pip如下方法超级用户(即作为root或使用sudo)。在某些情况下,它可能会破坏系统 Python,导致系统无法使用。

如何pip在本地虚拟环境中安装包。

答案2

如果我们不想不必要地导入有问题的模块(这将发生在语句中try),我们可以利用sys.modules它来测试已安装的模块之前都是进口的。

在python shell中问题:

>>> import sys

然后测试已安装的模块:

>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False

请注意,只有之前导入的模块才会True在本次测试中给出结果,所有其他模块(即使已安装)都会导致False.

python 控制台中的语句的另一种替代方法是调用内置try函数。这不会提供未安装模块的文档,例如importhelp()

>>> help('scipy')
no Python documentation found for 'scipy'

可以使用 来中断已安装模块的非常长的帮助文档的输出Q

现在要安装缺失的模块,建议使用Ubuntu 软件包管理(而不是 Python pip 方式),因为我们需要 root 访问权限,也为了防止弄乱我们严重依赖 Python 的系统。对于有问题的模块,这将是:

sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3

安装后,我们可以sys.modules通过导入一次将它们添加到字典中。

答案3

另一种方法是pkgutil模块。适用于 Python 2 和 Python 3:

python -c 'import pkgutil; print(1 if pkgutil.find_loader("module") else 0)'

您需要module用模块的名称替换,例如:

$ python -c 'import pkgutil; print(1 if pkgutil.find_loader("math") else 0)'
1

答案4

您可以将代码放在try,except块内。

$ python3 -c "\
try:
    import cow  
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

There was no such module installed

$ python3 -c "\
try:
    import regex
    print('\nModule was installed')
except ImportError:
    print('\nThere was no such module installed')"

Module was installed

相关内容