获取可用模块

73

使用PHP,您可以使用phpinfo()函数列出已安装的模块,并从中查找它们的功能。

是否有一种方法可以查看已安装的软件包/模块以进行导入?

6个回答

104
在解释器中输入help(),然后...
To get a list of available modules, keywords, or topics, type "modules",
"keywords", or "topics".  Each module also comes with a one-line summary
of what it does; to list the modules whose summaries contain a given word
such as "spam", type "modules spam".                                     

help> modules 

4
可以使用pydoc工具中的pydoc modules命令来在解释器内或者解释器外查看模块文档。 - Thomas Wouters
1
输入“模块垃圾邮件”不会显示可以从“垃圾邮件”导入的所有模块,例如sklearn.preprocessing中的PolynomialFeatures由于某种原因未显示...而@intuited的答案确实显示了它。不太确定为什么会这样。 - hello_there_andy
另一个简单的方法是使用 help('modules')help('modules keyword') 来搜索关键字。 - Bruno Alexandro García Tejada
help()函数还允许使用参数,如help("modules")。这对脚本非常有用。 - Maf
help() 函数还允许参数,例如 help("modules")。这对脚本非常有用。 - undefined

15
如果您使用的是改进版交互式Python shell(也称为“REPL”)ipython,则可以键入import (注意末尾的空格),然后按[TAB]键获取可导入模块列表。
此SO帖子所述,在安装(某些?)新模块后,您将不得不重置其模块哈希。您可能还不需要担心这个问题。
如果您不使用ipython,并且尚未尝试过它,那么值得一看。它比基本的Python shell或我使用过的任何其他REPL都要好得多。 ipython安装
如果您正在运行Linux,则很可能有一个ipython软件包,您可以通过系统管理工具进行安装。其他人需要遵循这些说明
如果你的安装路线需要使用easy_install,你可能想考虑改用pippipeasy_install更智能,能更好地跟踪文件位置。 如果你最终想要卸载ipython,这将非常有帮助。
列出包
请注意,上面的提示仅列出了模块。 要列出还包括——其中包含模块——的列表,您可以执行from +[TAB]。 关于包和模块之间的区别的解释可在Python官方教程模块章节中找到。
#rtfm
作为补充说明,如果你对Python非常陌生,花时间浏览标准库文档可能比仅根据名称选择模块更有意义。Python的核心文档写得很好,组织得很好。库文档目录中使用的组织分组——文件和目录访问数据类型等——并不容易从模块/包名称中看出来,也没有在其他地方使用,但它们是有价值的学习辅助工具。

1
好的回答,但是不应该直接使用sudo安装easy_install,因为没有简单的方法可以卸载。请使用你的发行版或virtualenv的包管理器。 - esamatti
@Epeli: 说得好。我已经更新了我的答案,解释了easy_install的这个缺点,并试探性地建议使用pip。我发现在轻度使用时,它确实像广告中所说的那样跟踪已安装的脚本等,尽管我尚未尝试使用它卸载像ipython这样复杂的任何东西。 - intuited
很好。help("modules")还会列出除了已安装的包之外的所有包。 - Maf
很好。help("modules")还会列出除了已安装的包之外的所有包。 - undefined

13

这非常有用。这是这个的脚本版本:

# To list all installed packages just execfile THIS file
# execfile('list_all_pkgs.py')
for dist in __import__('pkg_resources').working_set:
   print dist.project_name.replace('Python', '')

这个例子使用Python 2语法的print命令。请参见我添加到单行答案(“python -c”)的注释。 - Alan

6

您可以这样列出可用的模块:

python -c "for dist in __import__('pkg_resources').working_set:print dist.project_name.replace('Python', '')"

3
我在 Jython 2.7a 中遇到了 ImportError('No module named pkg_resources',) 的错误。 - n611x007
这里似乎缺少几个包。例如 math - Martin Thoma
这个例子使用Python 2语法来打印命令。为了在Python 2和Python 3中都能工作,将要打印的内容用括号括起来。 (我本可以自己进行编辑,但被告知建议编辑队列已满。)此外,您可能不需要删除“Python”的实例,这意味着您可以简化命令。 - Alan

3
如aaronasterling所说,sys.path上的所有.py或.pyc文件都是一个模块,因为它可以被导入。有一些脚本可以让你找到安装在site-packages中的外部模块。
Yolk是一个Python命令行工具和库,用于获取由setuptools、easy_install和distutils安装的软件包的信息,并且还可以查询pypi软件包。

1
您可以使用 pip 模块:
from pip._internal.operations.freeze import freeze

for line in freeze():
    print(line.split('=='))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接