python导入模块全局工作

时间:2010-01-02 14:42:34

标签: python import module

我试图让python接受导入'全局'

时遇到了问题

在一个模块中,它需要根据另一个变量导入另一个模块,但是如果我在start函数中有它,它似乎不会将它导入到所有模块函数中;例如:

def start():
    selected = "web"
    exec("from gui import " + selected + " as ui")
    log("going to start gui " + selected)
    ui.start()

这可行,但在同一个模块中:

def close():
    ui.stop()

不起作用。我不知道这里发生了什么

4 个答案:

答案 0 :(得分:8)

import gui
ui = None

def start():
  selected = "web"
  log("going to start gui " + selected)
  global ui
  __import__("gui.%s" % selected) # if you're importing a submodule that
                                  # may not have been imported yet
  ui = getattr(gui, selected)
  ui.start()

答案 1 :(得分:2)

你为什么要这样做?为什么不使用内置的__import__?此外,您对gui的绑定是函数start的本地绑定。

答案 2 :(得分:0)

您可以将exec的范围与in一起提供。试试这个:

exec("from gui import " + selected + " as ui") in globals()

答案 3 :(得分:0)

您只是将ui模块导入start()函数范围。您应该将模块导入全局范围。为此,您可以在两个函数(启动和关闭)之前导入模块,或者为exec()函数提供全局范围。

示例:为exec方法提供全局范围。

exec("from gui import " + selected + " as ui") in globals()