2012-03-30 40 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