【问题标题】:python module import conundrum (module from submodule)python模块导入难题(子模块中的模块)
【发布时间】:2014-07-28 13:43:21
【问题描述】:

我的项目结构如下:

./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()

我正在从 app/resources/__init__.py 的 models.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

我做错了什么?

【问题讨论】:

标签: python python-2.7 flask sqlalchemy flask-restful


【解决方案1】:

你有一个循环导入。

您正在从manage.py 导入create_appdbapi,这会触发app.resources.changesAPI 模块的导入,进而触发app/resources__init__.py 包的导入然后尝试导入您的models,但由于db 尚未在app/__init__.py 中定义而失败。

您需要将导入 ChangesAPI 移动到 在您的 app/__init__.py 文件中定义 db 的行之后。在from app.resources.changesAPI import ChangesAPI 之前的app/__init__.py 中定义的任何名称都可用于您的子包,之后的名称则不可用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-06-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    • 2021-10-20
    相关资源
    最近更新 更多