在终端中,启动 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,导致系统无法使用。
答案2
如果我们不想不必要地导入有问题的模块(这将发生在语句中try
),我们可以利用sys.modules
它来测试已安装的模块和之前都是进口的。
在python shell中问题:
>>> import sys
然后测试已安装的模块:
>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False
请注意,只有之前导入的模块才会True
在本次测试中给出结果,所有其他模块(即使已安装)都会导致False.
python 控制台中的语句的另一种替代方法是调用内置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
通过导入一次将它们添加到字典中。
答案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