【问题标题】:Failed Python3 imports when calling files in same/sub/super directories调用相同/子/超级目录中的文件时,Python3 导入失败
【发布时间】:2021-03-16 22:55:25
【问题描述】:

我知道有很多与导入错误和文件/文件夹结构相关的问题,但似乎没有一个与我的文件树具有相同的结构我一直在努力订购我的文件和导入几个小时,希望得到一些指导。

我的文件树如下

-MainFolder
   -program.py
   -HelperFolder
       -helper1.py
       -helper2.py
       -HelperTestFolder
           -helpertest.py

helper 函数需要相互导入,program.py 必须导入 helper1 和 helper2。 helpertest.py 函数必须导入 helper1.py 和 helper2.py

我尝试使用 __init__.py 文件作为 HelperFolder、import .filefrom file import * 等的各种组合。无论我做什么,我似乎都会遇到一些错误(NameErrors、ImportErrors 等)通过 helper1 或 helper2.py 文件、program.py 文件或 helpertest.py 文件。

对于这个含糊不清的问题,我很抱歉,但有没有一种“正确”的方法可以做到这一点?

【问题讨论】:

    标签: python python-3.x import directory-structure


    【解决方案1】:

    在program.py中:

    from HelperFolder import helper1, helper2
    

    在 helper1.py 中:

    import helper2
    

    管理循环依赖可能很棘手。您确定需要helper1helper2 来相互导入吗? 在 helpertest.py 中:

    import os, sys
    sys.path.append( os.path.realpath(os.path.dirname(__file__) + '/..' ))
    import helper1
    import helper2
    

    【讨论】:

    • 感谢@Tim Roberts。我删除了helper1helper2 之间的循环依赖关系,这样helper2 就不再需要导入helper1。我还必须将sys.path.append( os.path.realpath(os.path.dirname(__file__))) 添加到helper1 才能导入helper2。虽然我的代码确实比我提供的简化树更复杂,但可能还有其他问题潜伏......
    猜你喜欢
    • 2020-10-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 1970-01-01
    • 2017-03-22
    • 1970-01-01
    • 2012-09-16
    相关资源
    最近更新 更多