2012-07-03 70 views
1

我想在python中構建一種腳本系統,它允許在python中的運行時選擇和執行小代碼片段。在執行前將本地注入動態加載的模塊

基本上我希望能夠加載一個小蟒蛇文件中像

for i in Foo: #not in a function. 
    print i 

凡在某處我給你富是什麼節目別的。彷彿富擔任一個函數參數傳遞給整個加載蟒蛇文件,而不是一個單一的功能

所以其他

FooToPass = GetAFoo() 
TempModule = __import__ ("TheSnippit",<Somehow put {'Foo' : FooToPass} in the locals>) 

回答

2

它被認爲是不好的風格有副作用,在模塊級代碼的某個地方。如果您希望模塊執行某些操作,請將該代碼放在一個函數中,使Foo成爲此函數的一個參數,並以期望的值調用它。

Python的導入機制不允許預先初始化模塊名稱空間。無論如何,如果你想這樣做(在我看來,這是令人困惑和不必要的),你必須仔細研究導入機制的細節。示例實施(未測試):

import imp 
import sys 

def my_import(module_name, globals): 
    if module_name in sys.modules: 
     return sys.modules[module_name] 
    module = imp.new_module(module_name) 
    vars(module).update(globals) 
    f, module.__file__, options = imp.find_module(module_name) 
    exec f.read() in vars(module) 
    f.close() 
    sys.modules[module_name] = module 
    return module