【发布时间】:2015-12-15 02:50:16
【问题描述】:
我想要一份我的模块列表,然后被告知:
>>> help('modules')
会做的伎俩。但我只是得到
请稍等,我正在收集一个 所有可用模块的列表...
在我杀死它之前超过 10 分钟。
有人知道是什么原因造成的吗?或者我怎么能看到我的模块? (系统Ubuntu 9.10/Python 2.6.4)
谢谢,
丹
【问题讨论】:
我想要一份我的模块列表,然后被告知:
>>> help('modules')
会做的伎俩。但我只是得到
请稍等,我正在收集一个 所有可用模块的列表...
在我杀死它之前超过 10 分钟。
有人知道是什么原因造成的吗?或者我怎么能看到我的模块? (系统Ubuntu 9.10/Python 2.6.4)
谢谢,
丹
【问题讨论】:
help("modules") 可能需要很长时间,因为它必须先导入每个模块,然后才能在该模块的路径中搜索子模块。如果任何模块的代码在 if __name__ == "__main__": 保护之外,并且该代码需要用户输入或进入无限循环或因任何其他原因挂起,则这可能是一个问题。
在后台,help("modules") 调用 pkgutil.walk_packages,这表现出上述“导入所有内容”行为。作为替代方案,您可以调用iter_modules,它不会导入所有内容,缺点是只能迭代顶级模块。
>>> import pkgutil
>>> print [tup[1] for tup in pkgutil.iter_modules()]
['colorama', 'xlrd', 'BeautifulSoup', 'BeautifulSoupTests', '_ctypes', ...
#snip...
..., 'pywin', 'win32ui', 'win32uiole']
这也会遗漏一些内置模块,您可以使用sys 单独获取这些模块。
>>> import sys
>>> sys.builtin_module_names
('__builtin__', '__main__', '_ast', '_bisect', '_codecs', ...
#snip...
..., 'thread', 'time', 'xxsubtype', 'zipimport', 'zlib')
【讨论】:
如果您想查看已导入(直接或间接)的模块,
>>> import sys
>>> print sys.modules
help('modules') 是关于所有可用的模块——即如果你愿意,你**可以*导入的模块。对我来说它不会像你那样花很长时间,但如果你安装了足够多的扩展,它可能会有数千或数万个“潜在”模块来显示,所以它可能需要一点时间也就不足为奇了收集这些信息的时间。
【讨论】:
安装 ipython
$ sudo apt-get install ipython
然后运行 ipython 并输入 import <tab> 其中
如果你已经安装了 python-pygraphviz 包,你可以使用
import pygraphviz
【讨论】: