相对导入在Python中不起作用

tre*_*der 2 python python-3.x

我有这样的项目结构......

app/
    main.py
    app/
        __init__.py
        boot.py
        server.py
        controllers/
            __init__.py
            home.py
Run Code Online (Sandbox Code Playgroud)

进口是......

# main.py
from app import server

# server.py
from . import boot

# boot.py
from . import controllers

# controllers/__init__.py
from . import home

# controllers/home.py
from .. import boot
Run Code Online (Sandbox Code Playgroud)

现在所有的导入都在工作,除了最后一个.抛出的错误是......

ImportError: cannot import name boot
Run Code Online (Sandbox Code Playgroud)

有什么问题?(我使用的是Python 3.2)

Mar*_*ers 8

您正在导入boot导入controllers,然后要求导入home,home然后尝试导入boot,但尚未导入.不要这样做,你在这里创建一个循环依赖.

另请参阅Python中的循环导入依赖项

  • 您必须重新构建代码.99%的情况下,如果您的代码符合自然分层模式,并且您的更高级别组件必须导入较低级别的组件,那么您就会遇到设计缺陷. (6认同)
  • 通过更好地组织代码; 例如,重组,直到您不需要加载父包将有所帮助. (3认同)