2013-03-02 70 views
1

有沒有辦法只獲取由python腳本導入的本地模塊(腳本)列表?如何在python文件中查找本地導入?(使用modulegraph)

我的意思是我有2個文件。掃描的和掃描儀。我需要確定掃描的模塊使用哪些本地模塊(可能使用modulegraph/modulefinder),但我無法自己找到答案。

編輯:我實際上需要這樣做,而無需在掃描儀中導入已掃描的模塊,就像文件掃描一樣。

回答

0

我已經通過過濾其他模塊中的所有對象來檢查它是否屬於輸入模塊。
這不是超高效的,但我不認爲它需要。

import foo # your module 

import types 
print dict((k, v) for (k, v) in foo.__dict__.iteritems() if type(v)==types.ModuleType) 
+0

是的,它不需要是有效的,它只是爲每個文件運行一個,我不會一次處理超過20個文件。但我需要它在不導入目標模塊的情況下工作。你知道任何你只有一個路徑到目標文件的方式嗎? – tkp33 2013-03-02 14:03:17

0

由於python比C/Java更具動態性,如果您無法導入/運行掃描的模塊,則會出現問題。考慮這種類型的代碼:

re = __import__('re') 
mymodule = __import__(raw_input()) # even worse for you 

取決於你如何知道您掃描模塊,做文本搜索可能會或可能不會被罰款。

+0

我可能會忽略動態導入,(Im實際上是編碼一個可以與多個源文件和類一起工作的Python obsufcator),它可以忽略動態導入。不過,我會稍後再研究。現在我發現'bbfreeze'使用'modulegraph'來完成我需要的功能,所以我會用這種方法。謝謝! – tkp33 2013-03-03 12:27:30

+0

好吧,用modulegraph計算出來,當我有它很好的編碼時會發佈一個答案。 – tkp33 2013-03-03 22:15:22