如何访问Python help('modules')
显示的模块列表?它显示以下内容:
>>> help('modules')
Please wait a moment while I gather a list of all available modules...
...[list of modules]...
MySQLdb codeop mailman_sf spwd
OpenSSL collections markupbase sqlite3
Queue colorsys marshal sre
...[list of modules]...
Enter any module name to get more help. Or, type "modules spam" to search
for modules whose descriptions contain the word "spam".
>>>
我可以在输出中查看列表,但是希望从Python程序中将其作为列表进行访问。我怎么能这样做?
答案 0 :(得分:4)
您可以自己模仿所有help
。内置help
使用pydoc
,使用ModuleScanner
类获取有关所有可用库的信息 - 请参阅pydoc.py中的第1873行。
以下是链接中代码的一些修改版本:
>>> modules = []
>>> def callback(path, modname, desc, modules=modules):
if modname and modname[-9:] == '.__init__':
modname = modname[:-9] + ' (package)'
if modname.find('.') < 0:
modules.append(modname)
>>> def onerror(modname):
callback(None, modname, None)
>>> from pydoc import ModuleScanner
>>> ModuleScanner().run(callback, onerror=onerror)
>>> len(modules)
379
>>> modules[:10]
['__builtin__', '_ast', '_bisect', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', '_codecs_jp', '_codecs_kr', '_codecs_tw']
>>> len(modules)
379
答案 1 :(得分:2)
有多种方式。你可以尝试:
import sys
mod_dict = sys.modules
for k,v in mod_dict.iteritems():
print k,v
答案 2 :(得分:1)
答案 3 :(得分:1)
模块列表最终来自sys.builtin_module_names和pkgutil.walk_packages的输出的组合:
import sys
from pkgutil import walk_packages
modules = set()
def callback(name, modules=modules):
if name.endswith('.__init__'):
name = name[:-9] + ' (package)'
if name.find('.') < 0:
modules.add(name)
for name in sys.builtin_module_names:
if name != '__main__':
callback(name)
for item in walk_packages(onerror=callback):
callback(item[1])
for name in sorted(modules, key=lambda n: n.lower()):
print name
应该注意的是,创建列表的所有模块都将被导入(您可以通过在调用sys.modules
之前和之后检查help('modules')
的长度来自行验证这一点。
需要注意的另一点是walk_packages
的输出取决于sys.path
的当前状态 - 因此结果可能并不总是与help
的输出相匹配。