【问题标题】:Python, cannot import from top level __init__.pyPython,无法从顶级 __init__.py 导入
【发布时间】:2019-09-28 14:07:50
【问题描述】:

这是我当前的文件夹结构

.
├── api
│   ├── api_routes.py
│   └── sql
│       └── models.py  # import db into this file
├── application
│   └── __init__.py    # db here
└── wsgi.py

__init__.py 中有一个变量db(Flask-SQLAlchemy 实例)和一个函数create_app,都使用这一行成功导入wsgi.py

from application import create_app

我使用同一行将db 导入models.py,但无济于事。我现在能做什么?我不知道从哪里开始。一篇 SO 帖子暗示可能涉及循环导入,但是,我在我的代码中找不到它。我也尝试使用这些行导入但没有成功:

from . import create_app
from .application import create_app
from ..application import create_app

编辑:在解决问题 1 周后,我找到了导致这一切的原因。问题确实是循环依赖。感谢您的所有帮助!

【问题讨论】:

  • 您是否尝试将__init__.py 放入您的sql 文件夹? (可以为空)
  • @TheFool 我没有。我确实添加了__init__.py,但它并没有改变任何东西。
  • 嘿,我看到你想通了。如果您不介意写一个小摘要作为答案并接受它,这对未来的读者将非常有帮助。

标签: python import circular-dependency


【解决方案1】:

处理此类导入的技巧很少,

1)将“应用程序”文件夹标记为“Sources Root”,然后我认为它应该可以工作(使用pycharm时将文件夹标记为sources root相对容易,因此我建议您为此使用pycharm以及更多python技巧)

2) 技巧号是将要导入的目录的路径添加到 sys.path,执行类似

import sys
sys.path = ['/path/to/your/folder'] + sys.path
...
other code

然后导入应该可以工作。

我希望这会有所帮助(:

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-08
    相关资源
    最近更新 更多