2011-02-01 68 views
88

如何枚舉所有導入的模塊?如何列出導入的模塊?

E.g.我想從這個代碼獲得[「操作系統」,「SYS」]爲

import os 
import sys 
+5

有時候(例如:使用`ipython --pylab`)Python解釋器啓動並加載了預定義的模塊。問題仍然存在,關於如何知道使用的別名o_O – yota 2013-02-14 09:56:11

+0

我不認爲在本機Python中是可能的,但是這個前面的問題可能有所幫助:http:// stackoverflow。com/questions/2572582/return-a-list-of-imported-python-modules-in-a-script – parent5446 2011-02-01 01:52:49

回答

107
import sys 
sys.modules.keys() 

讓所有進口當前模塊的近似值只將檢查globals()的模塊:

import types 
def imports(): 
    for name, val in globals().items(): 
     if isinstance(val, types.ModuleType): 
      yield val.__name__ 

這不會返回本地進口或非模塊進口如from x import y。請注意,這將返回val.__name__,因此如果您使用import module as alias,您將獲得原始模塊名稱;如果你想要別名,可以使用yield name。

+1

或者你可以找到sys.modules與全局變量的交集,並且根本不做任何類型測試。 – Marcin 2013-10-15 15:15:34

+8

最後,我認爲使用`list(imports())`列出所有導入的模塊會更好。 – 2014-03-07 19:46:26

+0

這是您重新定義導入的模塊名稱時唯一返回完整模塊名稱的解決方案。例如,如果你將`numpy導入爲np`,這將返回`numpy`,而另外兩個建議將返回`np`。 – 2015-08-09 15:16:52

11
print [key for key in locals().keys() 
     if isinstance(locals()[key], type(sys)) and not key.startswith('__')] 
25

找到sys.modules的交叉口globals

import sys 
modulenames = set(sys.modules)&set(globals()) 
allmodules = [sys.modules[name] for name in modulenames] 
5

它的實際工作挺好用:

import sys 
mods = [m.__name__ for m in sys.modules.values() if m] 

這將創建一個列表與導入的模塊名稱。

10

如果你想從腳本外面做:

from modulefinder import ModuleFinder 
finder = ModuleFinder() 
finder.run_script("myscript.py") 
for name, mod in finder.modules.iteritems(): 
    print name 

這將打印由myscript.py加載的所有模塊。

2

此代碼列出了你的模塊導入模塊:

import sys 
before = [str(m) for m in sys.modules] 
import my_module 
after = [str(m) for m in sys.modules] 
print [m for m in after if not m in before] 

,如果你想知道什麼外部模塊來安裝新的系統上運行代碼應該是有用的,而不需要再試試再次。

它不會列出從其導入的sys模塊或模塊。

1

比方說您已經導入數學和重:

進口數學,重新

現在看到的一樣使用

打印(DIR ())

如果您在導入之前和導入之後運行它,可以看到差異。