2012-08-24 85 views
0

这是我列出的列出已安装模块的基本代码。在Python中列出已安装模块

import sys as s 
mod=s.modules.keys() 
for indx,each in enumerate(mod): 
    print indx,each 

但是我期待的是,它应该只打印出父模块名称,如用于

numpy.f2py.pprint' 
numpy.distutils.atexit' 
numpy.distutils.sys' 
numpy.f2py.sys' 

它应该再指望它作为numpy的和移动寻找下一个模块并重复相同方式...

+1

还有呢?你有没有试过?在'。'之后直接分割模块名称。并将第一部分存储在某个列表中,并为每个找到的其他模块添加一个检查。问题是什么? –

+0

是的,我试过了,很快就会发布,但这不是我的家庭作业,我厌倦了忘记我已经安装了一个模块,有时而不是试图导入我从网上下载...还必须记住事情。 –

回答

1
import sys as s 
mod=s.modules.keys() 
mods_seen = list() 
for indx,each in enumerate(mod): 
    parts = each.split('.') 
    if not parts[0] in mods_seen: 
     print indx,each 
     mods_seen.append(parts[0]) 
+0

发现模块是不同的,如果搜索通过Python解释器或通过空闲或通过VIDLE解释器.. 我一直在试验很多! 为什么如此? –

0

系统命令pip freeze只是你想要什么,但我不完全确定它是否列出所有模块或只有与pip安装的。

+1

后者。另外,不是每个人都使用'pip'。 –

+0

正是我不使用点... –

5
import sys 
print set([each.split('.')[0] for each in sys.modules.keys()]) 
+1

由于某种原因,它不列出numpy模块:/ –

+0

sys.modules不是所有已安装模块的列表,它是已加载模块的列表,如果您在代码顶部添加“import numpy”,它也会显示numpy。 – MostafaR

+0

正好,但sys.modules.keys()列出我提到的所有例子 –

0
def __listAllModules(self): 
    """ This method returns all the modules installed in python 
     including the built in ones. 
    """ 
    allmodules = list(sys.builtin_module_names) 
    allmodules += list(t[1] for t in pkgutil.iter_modules()) 
    allmodules = sorted(allmodules) 
    return allmodules