在终端中,当我启动Python后,我如何知道Python中有哪些模块?
假设我需要学习NumPy和SciPy这两个模块。
- 如果它们未安装,我该如何安装?
- 如果已经安装了,我该如何知道?
$ 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
< p > < strong > 或者 您还可以按照Zack Titan在下面的评论中建议的方式使用python-pip
安装Python模块。要安装numpy
,您可以执行以下操作:pip install numpy
警告:强烈建议仅使用官方的Ubuntu软件库安装Python模块,而不要使用超级用户(即root或使用sudo)的pip
方法。在某些情况下,这可能会破坏系统Python导致您的系统无法使用。
try
语句中发生),我们可以利用sys.modules
来测试已安装且之前已导入的模块。>>> import sys
>>> 'numpy' in sys.modules
True
>>> 'scipy' in sys.modules
False
True
,所有其他模块(即使已安装)都会返回False
。import
语句的替代方法是调用内置的help()
函数。这不会为未安装的模块提供文档,例如。>>> help('scipy')
no Python documentation found for 'scipy'
sudo apt-get install python-scipy ## for Python2
sudo apt-get install python3-scipy ## for Python3
sys.modules
只包含已经被导入的模块,所以它不是一个可靠的方法来测试一个模块是否已经安装。最可靠的测试方法是使用 try/except
并捕获 ImportError
,正如其他人已经建议的那样。 - ekhumorosys.modules
是完全无关的,我认为提及它可能会误导。但也许这只是我的看法。 - David Zsys.modules
在这里没有任何帮助。 - catpkgutil
模块。适用于Python 2和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
print()
也可以正常工作;它被视为带有括号的组语法,并且没有任何副作用。只有当你想要添加多个项目(如print('a', 'b')
)时,它将被视为一个tuple
,在这种情况下,你确实需要from __future__ import print_function
,但在这种情况下不适用,你只需通过添加括号来编写向前兼容的代码(我在Python 2和3中测试了我的更改)。 - Martin Tournoijexit
,以便在shell环境中使用:python -c 'import pkgutil; exit(0 if pkgutil.find_loader("math") else 2)'
- A T我知道原始问题是关于在开始使用Python后寻找解决方案,但在Python之外,我使用pip
。在Ubuntu上,如果尚未安装,请运行sudo apt-get install python-pip
。
然后,要查看可用的第三方模块,只需运行:
pip freeze
pip list
pip install <module-name>
pip search <keyword>
pip search
不再起作用了。(请参见下面 @AJM 的评论)。我倾向于直接使用 Pypi 的搜索功能。pip show <module-name>
命令可以显示一个包是否已安装,例如 pip show numpy
。 - Herpes Free Engineerpip search
不再可用:PyPI的XMLRPC API已被禁用。有关此决定背后的原因,请参阅https://www.theregister.com/2021/05/25/pypi_search_error/ - 但该文章是在禁用API仅为临时的情况下编写的。在一月份,已发出电子邮件公告将其永久禁用。 - AJM$ 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
-m module-name
Searches sys.path for the named module and runs the correspond‐
ing .py file as a script.
$ python2 -m numpy
/sbin/python2: No module named numpy.__main__; 'numpy' is a package and cannot be directly executed
$ python2 -m math
/sbin/python2: No code object available for math
$ python2 -m doesnt_exist
/sbin/python2: No module named doesnt_exist
grep
来匹配这个。$ python2 -m doesnt_exist |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Nope
$ python2 -m math |& grep -q 'No module named' && echo 'Nope' || echo 'Yup'
Yup
-m
的本意;但如果你想要一个快速测试的话,这是最省力的方法 :-)grep -q
使重定向到 null 变得不必要。 - muru/dev/null
:-/ - Martin Tournoijimport pip
import sys
from bigml.api import BigML
if not 'bigml' in sys.modules.keys():
pip.main(['install', 'bigml'])
我发现为了使我的基础设施部署具有幂等性,我需要能够在一个单行命令中从shell检查软件包。我在 @cuonglm 的答案基础上进行了修改。我不得不反转 1
和 0
,因为我需要生成一个退出状态而不是打印一个字符串。
python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader(sys.argv[1]) else 1)" pymongo
sys.argv[1]
,但是对于我的配置脚本,我喜欢将其放在最后以增加可读性。python -c "import sys, pkgutil; sys.exit(0 if pkgutil.find_loader('pymongo') else 1)"
pip show ...
似乎是最简单的方法:
https://pip.pypa.io/en/stable/reference/pip_show/
但是当软件包未安装时,它是静默的(即不返回任何内容)。pip list | grep <package-name-Case-Matters>
pip list | grep pywinrm
pip list | grep numpy
pip list | grep [Nn]um[Pp]y # it works with numpy, Numpy, numPy, and NumPy
vpython
,您需要执行以下命令:sudo apt-get install python-visual libgtkglextmm-x11-1.2-dev
。 - sourav c.sudo apt-get install python-pip
来安装pip,然后要安装模块,只需输入pip install numpy
即可。 - thuyeinpip
,因此您可以直接使用python -m pip install
命令进行安装,无需额外安装pip
作为外部程序。 - Bakuriupython -m ensurepip
,确保pip
已安装在那里。 - jfssudo pip
,因为它可能会破坏系统的Python。请使用apt-get命令安装适用于系统Python的软件包。你可以使用pip --user
选项或者virtualenv来安装适用于自己的Python软件包。 - jfssudo
,而不是pip
。我经常使用pip
在本地虚拟环境中安装各种包。 - jfsroot
或使用sudo
的方式。 - sourav c.pip list
命令查找已安装在特定环境中的内容。 - Steve Barnespython -c "import math"
然后echo %ERRORLEVEL%
。 - Hans Ginzel