如何在运行时导入文件?

时间:2014-02-11 18:28:17

标签: python import

我有以下问题:

file1.py包含file2.py所需的函数和变量。 使用from file1 import myclass1时没有问题。 问题是,我还希望在运行file2.py

时将变量从file1.py“发送”到file2.py from file1 import myclass1中的

file2.py不起作用,因为当我编译file2.py时,它会导致一个ImportError:

pydev debugger: starting
Traceback (most recent call last):

   File "****\file1.py", line 13, in <module>
      from file1 import myclass1
   File "****\forfile1.py", line 7, in <module>
      from file2 import myclass2
   File "****\file1.py", line 13, in <module>
      from file1 import myclass1
ImportError: cannot import name s4dat_class

那么,如何在运行时导入文件?或者有其他方法可以做我想要的吗? THX

2 个答案:

答案 0 :(得分:1)

如果问题是“当module2从module1导入时如何从module1导入module2”,简单的答案是“你不能”,解决方案是

  • 合并两个模块,
  • 或将公共依赖项提取到第三个模块
  • 或传递所需的对象(提示:类和函数也是对象)作为函数或方法参数(最简单的依赖注入形式)。

完整的答案是有一些解决方法(比如从函数体内导入),但这很麻烦,99.8%的时间(大约)是一个确定的设计气味 - 你应该没有循环依赖性这样可以更好地治愈设计,而不是采用非常简单的解决方法。

答案 1 :(得分:1)

在file_2.py中,您可以输入:

my_module = __import__("file_1")  # assuming file_1.py in the python path.

然后您可以使用my_module,因为它是file_1

但是为了实现您想要的内容,我建议您将file_1.pyfile2_py中常见的所有内容放在一个单独的文件file_3.py中。然后,您可以在两者中导入file_3.py