2012-03-02 14 views
1

我有一個文件夾結構是這樣的:如何從命令行導入,然後遍歷導入的模塊?

package_name/ 
|-- module1 
|-- module2 
|-- module3 

我需要做的是import package_name,然後遍歷每個模塊,在他們運行的代碼此起彼伏。導入是在命令行給出的,所以我無法提前控制它。因此,用戶可能會說,run_script.py --modules='package_name.module1'或用戶可能會簡單地說,run_script.py --modules='package_name

我可以做from package_name import *,這將導入在我的__all__變量__init__.py中定義的所有東西,但從那裏我有點難住。

對於我的下一個步驟,我需要做的一種方式:

def import_by_path(path): 
    if '.' not in path: 
    return __import__(path, globals(), locals()) 

    path, module = path.rsplit('.', 1) 
    mod = __import__(path, globals(), locals(), [module]) 

    try: 
    return getattr(mod, module) 
    except AttributeError: 
    raise ImportError, "Could not import %s" % path 

使用這樣的:

for module in imported: 
    module.run() 

回答

1

我通常使用這樣的函數由路徑導入模塊

mod = import_by_name("itertools") 

或者您的情況:

for mod in map(import_by_name, imported): 
    mod.run() 
+0

我沒有按照原樣使用它,但它給了我所需的所有方向來理清我自己的技術。謝謝! – mlissner 2012-03-02 20:08:36