2012-03-30 38 views
9

如何获得所有可用的Python模块列表?Python:模块的完整列表

我不想要模块的模块。只是在sys.path中提供的所有模块的基本列表。

help('modules')不是解决方案,因为我希望它可用作变量,并且它导入那些有副作用的模块。

编辑:副作用我的意思是像图书馆的http://kivy.org/ kivy,这使得使用的事实,一旦你导入它的代码被执行。

+1

我看不出这是一个重复的问题,因为'pkgutil'甚至没有被提及另一个线程,这里有一个明确的限制:**没有副作用!** – 2015-12-19 13:21:10

回答

7

pkgutil - 公用事业支持包

这将产生一个元组上sys.path的所有子模块:

pkgutil.iter_modules() 

,看看有什么装,看:

sys.modules 

“这是一个将模块名称映射到 已加载模块的字典”

加载的模块列表:

sys.modules.keys() 
+1

“已经被加载”。 OP希望所有可加载模块。 – liori 2012-03-30 18:06:45

+0

编辑第一个答案 – 2012-03-30 18:15:54

+1

@jsbueno。 pkgutil * not *如何回答这个问题? afaict,它给出了他所要求的:“sys.path中所有可用模块的列表”。 – 2012-03-30 18:44:20

5

使用了Python的走来安装外部脚本 “是pydoc”:在命令行中键入 :

$ pydoc modules 

是pydoc可以从内Python的使用为好,让它走一切可用的方法之一是:

all_mod = [] 
pydoc.ModuleScanner().run(callback=(lambda *a: all_mod.append(a[1])), onerror=lambda *a:None) 
print all_mod 
+0

一个好主意,但是它会导入这些模块(如果你已经安装了'kivy',可能会产生副作用 – 2012-03-30 19:18:09

+0

pydoc会手动检查所有可用的文件,然后导入它们 - 如果你不想导入部分,我想你必须查看pydoc代码并从中复制才能看到所有可用的模块(包括zip文件和蛋中的模块)。 – jsbueno 2012-03-30 20:27:33