2016-02-08 40 views
3

的所有功能,我有一個具有文件,MyClass類和一些文件與功能(一個文件可以包含超過1個功能)的多模塊Python包。獲取Python包

我試圖獲得這個包中的所有功能。

首先,使用以下:

modules = [] 
for importer, module, ispkg in pkgutil.iter_modules(package.__path__): 
    modules.extend(module) 

,但我只拿到了模塊名稱,而不是模塊對象。

當我試圖用inspect.getmembers(module, inspect.isfunction)讓這些模塊的功能,我當然有一個空的集合。

所以,我怎麼能得到從包中的所有模塊對象爲進一步獲取的功能呢?

是否更簡單的方法來從多文件包存在的所有功能?

P.S.我需要確切的function對象,而不僅僅是他們的名字。

編輯。

  1. dir(package)給我唯一內置變量:

    ['__builtins__', '__doc__', '__file__', '__name__', '__package__', '__path__']

  2. inspect.getmembers(package, inspect.infunction)如我上面描述給出了一個空 清單,以及相同的代碼爲每個module

  3. dir(module)給我供 str對象的所有方法的名稱列表(因爲,iter_modules()只給出名 模塊)。

  4. AST ...你確定,不存在簡單的解決方案?

+0

http://stackoverflow.com/questions/139180/listing-all-functions-in-a-python-module,http://stackoverflow.com/ questions/4040620/is-it-it-to-list-all-functions-in-a-module ...? – rbaleksandar

+0

@rbaleksandar,我看到這些帖子試圖找到解決方案。但是他們中沒有人不適合我(見我的編輯)。 – VeLKerr

+0

這個問題**不重複**,因爲所有的答案發布[這裏](http://stackoverflow.com/questions/4040620/is-it-possible-to-list-all-functions-in-a-模塊)不適合我(首先,我有一個** multimodule **包,第二,我需要**功能對象**,不僅名稱)。 – VeLKerr

回答

1

試試這個:

for importer, module, ispkg in pkgutil.iter_modules(package.__path__): 
    print dir(__import__(module)) 
+0

謝謝,但它不工作。我不能在沒有父模塊的情況下導入子模塊,所以如果我運行你的代碼片段,我會得到:'ImportError:No module named sub_module'。我解決了這個問題,如下所示:'print dir(__ import __(package .__ name__ +'。'+ module))''。但是,我又得到了一個'str'列表,但需要'module'對象或一些類似的對象,我將從中獲取函數。 – VeLKerr

+0

@VeLKerr然後首先加載父模塊。 – Andrey