Python 在执行前将局部变量注入动态加载的模块

Python 在执行前将局部变量注入动态加载的模块,python,Python,我正在尝试用python构建一种脚本系统,允许在python内部的运行时选择和执行小代码片段 基本上,我希望能够加载一个小的python文件,如 for i in Foo: #not in a function. print i 我在程序的其他地方指定了Foo。好像Foo充当了整个加载python文件的函数参数,而不是单个函数 那么在别的地方 FooToPass = GetAFoo () TempModule = __import__ ("TheSnippit",<Somehow

我正在尝试用python构建一种脚本系统,允许在python内部的运行时选择和执行小代码片段

基本上,我希望能够加载一个小的python文件,如

for i in Foo: #not in a function.
    print i
我在程序的其他地方指定了Foo。好像Foo充当了整个加载python文件的函数参数,而不是单个函数

那么在别的地方

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

在模块级使用带有副作用的代码被认为是不好的风格。如果希望模块执行某些操作,请将该代码放入函数中,将
Foo
作为该函数的参数,并使用所需的值调用它

Python的导入机制不允许预先初始化模块名称空间。如果你想这样做(在我看来,这是混乱和不必要的),你必须摆弄导入机制的细节。示例实现(未经测试):

导入imp
导入系统
def my_导入(模块名称,全局):
如果sys.modules中的模块名称:
返回系统模块[模块名称]
模块=导入新模块(模块名称)
变量(模块).更新(全局)
f、 模块。\文件\选项=imp.find\模块(模块名称)
变量(模块)中的exec f.read()
f、 关闭()
系统模块[模块名称]=模块
返回模块