2017-11-20 3 views
0

私はflask_restfulで個人用アプリケーションを作成していますが、すべてmodels.pyapp.pyという単一のもので処理していましたが、アプリケーションが大きくなり、フォルダを再構築することにしました。Pythonは同じフォルダ構造内のパッケージをインポートできません

私は現在、以下の構造を有する:

/project_folder 
    application_name 
     __init__.py 
     controllers.py 
     models.py 
    config.py 
    manage.py 
    run.py 
    tests 
     __init__.py 
     test_controller.py 

すべてがこれまでに動作しますが、私は、構造が以下のようにしたい:

/project_folder 
    application_name 
     __init__.py 
     controllers 
      __init__.py 
      brewery_controller.py 
      ...others 
     models 
      __init__.py 
      base_model.py 
      brewery.py 
      ...others 
    config.py 
    manage.py 
    run.py 
    tests 
     __init__.py 
     test_controller.py 

しかし、私はそれを動作させるように見えることはできません。ここで私は運と

from brewery_controller import BreweryList, BreweryResource 
from base_model import db 

と試みたアプリケーション__init__.py

#/project_folder/application_name/__init__.py 
import os 

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 
from flask_restful import Api 

from controllers import BreweryList, BreweryResource 
from models import db 

def initApp(config): 

    app = Flask(__name__) 
    app.config.from_object(config) 
    app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False 

    db.init_app(app) 
    api = Api(app) 

    api.add_resource(BreweryList, '/breweries') 
    api.add_resource(BreweryResource, '/breweries/<brewery_id>') 

    return app 

です。私はImportError: cannot import BreweryListを取得し続けており、醸造所のクラスのインポート行のコメントを外すと、同じことがdbになります。

controllers/__init__.pymodels/__init__.pyはどちらも空です。ここで

run.py

import os 

from beerinv import initApp 

if __name__ == '__main__': 

    app = initApp(os.environ['APP_SETTINGS']) 
    app.run() 
+0

を...' ? – hjpotter92

+0

いくつかのドットがありません: 'from .models import db'([docs](https://docs.python.org/3/tutorial/modules.html#intra-package-references)) –

+0

完全なインポートパスは、パッケージのインポートの途中で開始することはできません。 'application_name.controllers.brewery_controller'から。 – davidism

答えて

0

がフルインポートパスを置くことによって@davidismコメント従うことによって問題を解決することができもある:インポートcontrollers.brewery_controllersから `てみました

from application_name.controllers.brewery_controller import BreweryList, BreweryResource 
from application_name.models.base_model import db 
関連する問題