command line

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

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

  • 如果没有安装,我将如何安装?
  • 我怎么知道它是否已经被安装?

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

$ python -c "import math"
$ echo $?
0                                # 数学模块存在于系统中

$ python -c "import numpy"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: No module named numpy
$ echo $?
1                                # numpy 模块在系统中不存在

如果没有安装,我将如何安装?

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

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

或者,您也可以按照 Zack Titan 在下面评论中的建议使用 python-pip 安装 python 模块,要安装 numpy ,您可以使用

pip install numpy

警告:强烈建议仅使用官方 Ubuntu 存储库安装 python-modules,并且不要以超级用户身份使用 pip 方法(即,以 root 身份或使用 sudo )。在某些情况下,它可能会通过破坏系统 python 使您的系统无法使用。

如何使用 pip 将软件包安装到本地虚拟环境中。




如果我们不想意外地导入有问题的模块(这会在 try 语句中发生),我们可以使用 sys.modules 来测试之前安装导入的模块。

在python shell问题上。

>>> import sys

然后测试已安装的模块。

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

请注意,只有之前导入的模块在此测试中为 True ,所有其他模块(即使已安装)都会导致 False.

try import 语句的另一种方法是调用内置的 help() 函数。这不会为未安装的模块提供文档,例如

>>> 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 字典中。