首页 > 解决方案 > 如何在另一个导入包中使用一个变量而不再次运行该文件

问题描述

我有一个烧瓶应用程序,我已将代码拆分为多个 python 文件,每个文件专用于整个程序的特定部分(db、login、admin 等)。大多数文件都有某种设置代码来创建它们各自的模块对象,该对象必须能够访问我的主文件中定义的 Flask 对象。一些模块还需要访问其他模块中的变量,但是在导入它们时,它们会再次运行,即使它们已经在 main 中导入。

以下代码是该问题的一个示例。

如果我有这样的 main.py

import foo
import bar
if __name__ == "__main__":
    foo.foofunc()

foo.py

import bar
@bar.barable
def foo(string):
    print(string)

和 bar.py

import foo
foo.foo("hello")
def barable(fun):
    def r(*args, **kwargs):
        print("this function is completely unbarable")
        func(*args, **kwargs)

这段代码不起作用,因为 foo 导入了 bar,而后者又导入了运行 bar.barable 的 foo,而 bar.barable 尚未定义。

在这种情况下(假设调用 foo.foo 是必要的),我唯一的选择是将 bar.barable 从 bar 提取到单独的模块中,还是有其他方法可以解决这个问题?

我知道在 python 中导入一个模块会运行该文件,但是有没有办法将一些代码放入相同的检查中,__name__ == "__main__"但要检查它是否由 main 而不是另一个模块导入?

标签: pythonpython-3.6

解决方案


推荐阅读