python模块导入难题(子模块中的模块)

脯氨酸

我有以下项目结构:

./app/__init__.py
./app/main/__init__.py
./app/main/views.py
./app/models.py
./app/resources/__init__.py
./app/resources/changesAPI.py
./config.py
./manage.py

app/models.py文件具有以下行:

from app import db

db 在中定义 app/__init__.py

db = SQLAlchemy()

我正在从中从models.py导入类app/resources/__init__.py

from app.models import User, Task, TaskChange, Revision

但是,当模型尝试导入时,它将失败db

Traceback (most recent call last):
  File "manage.py", line 5, in <module>
    from app import create_app, db, api
  File "/Users/nahuel/proj/ptcp/app/__init__.py", line 16, in <module>
    from app.resources.changesAPI import ChangesAPI
  File "/Users/nahuel/proj/ptcp/app/resources/__init__.py", line 5, in <module>
    from app.models import User, Task, TaskChange, Revision
  File "/Users/nahuel/proj/ptcp/app/models.py", line 1, in <module>
    from app import db
ImportError: cannot import name db

我究竟做错了什么?

马丁·彼得斯(Martijn Pieters)

您有一个循环导入。

您正在导入从中导入create_app这会触发模块的导入,然后又会触发模块的导入,然后其中尝试导入您,但由于尚未在中定义,因此失败dbapimanage.pyapp.resources.changesAPI__init__.pyapp/resourcesmodelsdbapp/__init__.py

您需要将进口ChangesAPI行定义dbapp/__init__.py文件中。您在子包中可以使用app/__init__.py之前定义的任何名称from app.resources.changesAPI import ChangesAPI,后面的名称则不能使用。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章