如何使导入的模块使用与我的主要相同的对象?

时间:2014-05-20 00:15:54

标签: python import namespaces

我的设置是这样的。 我有一个engine.py,它定义了许多我在外部script.customextension中编写和修改的变量和自定义函数。我正在使用imp.load_source('script', 'script.customextension')导入我的外部脚本,但是当我这样做时,无法从外部模块访问所有变量和函数。

然后我尝试将其写为外部脚本中的第一行:from engine import *然后我重新实例化所有对象并丢失已创建的我需要访问的对象。

总体简化如下

档案engine.py

a = 10

def f(myval):
    global a
    a = myval
    print(a)

if __name__ == '__main__':
    imp.load_source('script', 'script.ext')

和文件 script.ext有这一行

f(20)

运行engine.py时的结果:

NameError: name 'f' is not defined

我想要的是:

20

2 个答案:

答案 0 :(得分:0)

这是丑陋的:

import __main__ as main

main.f(20)

答案 1 :(得分:0)

我发现可以使用此解决方案而不是导入模块(请参阅exec

    _file = open('script.ext')
    for line in _file:
        exec(line)