【问题标题】:Import error raised when importing file1.py in file2.py where file2.py also imports file1.py [duplicate]在 file2.py 中导入 file1.py 时引发导入错误,其中 file2.py 也导入 file1.py [重复]
【发布时间】:2019-12-16 21:52:17
【问题描述】:

我的 Python Pyramid 文件,File2.py 正在导入 File1.py,而 File1.py 正在导入 File2.py,这会创建无限循环并引发导入错误。我需要导入这些以使用类的公共变量以及它们的函数。我如何做到这一点?

我在下面尝试过:

File2.py
Class File2 :

    def __init__(self, sessionId):
        from server.eventmanager.file1 import File1 # : Doesnt Work
   if __name__ == "__main__":
      from server.eventmanager.file2 import File2 # : Doesnt Work(Tried both(init+ main)/either

    def myFunc(self):
        print(File1.myvar)



File1.py        
from /server/modules/mymodule/file2 import File2

Class File1:
    def __init__(self):
        pass

    myvar = False

    def updateMyVar(self,updatedvar):
        cls.myvar=updatedvar
        #Do Something

File "/server/eventmanager/file1.py", line 7, in <module>
from server.modules.mymodule.File2 import file2
File "/server/modules/mymodule/file2.py", line 13, in <module>
from server.eventmanager.File1 import file1
ImportError: cannot import name 'file1'

【问题讨论】:

标签: python python-3.x pyramid


【解决方案1】:

我认为您正在寻找python中的循环依赖

Circular dependency in Pythonenter link description here

你可以看看如何解决它们。

【讨论】:

    【解决方案2】:

    您可以在您的第一个导入上方添加一个 if 子句。
    如果我理解正确,那么您的代码以File2.py 开头。

    在这种情况下,你应该这样做:

    if __name__ == "__main__":
        import file1
    

    如果你运行File2.py __name__ 将是__main__。结果 if - 子句为真,您导入 File1.py。现在File1.py 导入File2.py 但这次__name__ 不是__main__ 因为它不作为“主文件”运行。这次 __name__ 将是 File1 并且 File1 不再导入 Test2 因为 if 子句停止它,但它仍然有它的代码,因为它已经导入了一次。

    编辑: 好,我知道了!您必须将if __name__ == "__main__" 子句放在代码的顶部 在您的File1.py

    if __name__ == "__main__":
        from server.eventmanager.file2  import file2  # Doesnt Work(Tried both(init+ main)/either
        from server.eventmanager.file1 import File1  # : Doesnt Work
    
    class File2:
    
        def __init__(self, sessionId):
            pass
    
        def myFunc(self):
            print(File1.myvar)
    

    【讨论】:

    • 感谢您的回答。我在上面尝试过(在原始发布的问题中更新了 sn-p),但我从 Pylint 收到错误,告诉 File1 是未解决的参考。 init 和 main 不一样吗?
    • 您可以编辑您的帖子并添加您目前拥有的代码吗?
    • 更新了帖子。请检查
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多