3

次のプロジェクト構造があります。

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

私は何を間違っていますか?

4

1 に答える 1

3

循環インポートがあります。

をインポートしcreate_appていますdbapifrommanage.pyは、app.resources.changesAPIモジュールのインポートをトリガーします。次に、__init__.pyパッケージのインポートをトリガーし、app/resourcesで をインポートしようとしますが、は でまだ定義されていないmodelsため失敗します。dbapp/__init__.py

ファイルで定義されている行のにインポートを移動する必要がありChangesAPIます。の前に定義された名前はサブパッケージで使用できますが、後の名前は使用できません。dbapp/__init__.pyapp/__init__.pyfrom app.resources.changesAPI import ChangesAPI

于 2014-07-28T13:55:17.420 に答える