动态导入模块

时间:2013-11-04 03:19:59

标签: python

如何在不重新启动程序并手动执行的情况下保持导入?

我试过这个:

class runProgram:
    def cmdEval(self,data):
        try:
            return str(repr(eval(data)))
        except Exception as e:
            return e
    def cmdImport(self,data):
        try:
            __import__(data)
            return "Imported."
        except: 
                return "Error to import"
    def run(self):
        while True:
            command = input("Command: ")
            command,data = command.split(" ",1)
            if command == "ev": print(self.cmdEval(data))
            elif command == "imp": print(self.cmdImport(data))

然后我做了以下事情:

>>> runProgram().run()
Command: imp time
Imported.
Command: ev time.time()
name 'time' is not defined

结果不起作用,正如我所预料的那样,但他们是否可以在不使用保存数据的情况下动态导入?我的意思是我希望能够使用它,但我不希望它在我重新启动之后我只是希望能够拥有它,因为我需要为该特定会话导入一些东西所以例如这将是期望的结果我想要,

imp time
ev time.time()
>1383535034.20894
>>> ================================ RESTART ================================
>>> time.time()
Traceback (most recent call last):
  File "<pyshell#238>", line 1, in <module>
    time.time()
NameError: name 'time' is not defined

这可能吗?

1 个答案:

答案 0 :(得分:3)

__import__返回导入的模块,不会更改全局命名空间。

替换以下行:

__import__(data)

使用:

globals()[data] = __import__(data)