2017-04-07 10 views
0

私は内部のコントローラフォルダを存在し、メインコントローラに私のメインのappフォルダ内に存在のinitの.pyファイルからsocketioをインポートしたいのですが、私はそれを行うことができない、エラーが言うように表示されます。私は、フラスコ内の__init__からインポートすることはできませんか?

はImportError :ここ

socketio名前をインポートすることはできません私のアプリの木である:

├── add_permissions.txt 
├── db_init.py 
├── develop 
│   ├── config.py 
│   ├── controllers 
│   │   ├── abonent.py 
│   │   ├── events.py 
│   │   ├── __init__.py 
│   │   ├── panel.py 
│   │   └── users.py 
│   ├── extentions.py 
│   ├── forms.py 
│   ├── forms.pyc 
│   ├── __init__.py 
│   ├── models.py 
│   ├── plugins.py 
│   ├── requests.py 
│   ├── send_sms.py 
├── init.sh 
├── manage.py 

私はアプリを作成して、私の__init__.pyの内容:

from flask import Flask 

from develop.controllers.abonent import abonent_route 
from develop.controllers.panel import panel_route 

from flask_principal import identity_loaded, UserNeed, RoleNeed 
from flask_login import current_user 

from develop.extentions import (
    login_manager, 
    toolbar, 
    assets_env, 
    cache, 
    moment, 
    principal 
) 

from develop.models import (
    db, 
    User 
) 

from flask_socketio import SocketIO 
socketio = SocketIO() 

def create_app(config_object): 

    app = Flask(__name__) 
    app.config.from_object(config_object) 

    ######## Register Database ######## 

    db.init_app(app) 
    # csrf.init_app(app) 

    ######## Register Extentions ######## 

    login_manager.init_app(app) 
    toolbar.init_app(app) 
    assets_env.init_app(app) 
    moment.init_app(app) 
    principal.init_app(app) 

    socketio.init_app(app) 

    ######## Register Routes ######## 

    app.register_blueprint(abonent_route) 
    app.register_blueprint(panel_route) 

    # Identify the users roles 
    @identity_loaded.connect_via(app) 
    def on_identity_loaded(sender, identity): 
     # Set the identity user object 
     identity.user = current_user 

     # Add the UserNeed to the identity 
     if hasattr(current_user, 'id'): 
      identity.provides.add(UserNeed(current_user.id)) 

     # Add each role to the identity 
     if hasattr(current_user, 'roles'): 
      for role in current_user.roles: 
       identity.provides.add(RoleNeed(role.name)) 

    return app 

私がアプリでsocketioを起動したのを見ると、エラーは表示されません。

panel.py内部で私はエラーが私がfrom develop import socketioまたはfrom .. import socketioを使用ゆくえ示し開発からsocketioを輸入している場合。

は、問題がどこにあるすべてのボディは、私が何をすべき?私に語ってもらえますか?

答えて

0

from develop import socketioまたはfrom .. import socketioようpanel.pyで任意のコードが実行されると

socketio = SocketIO() 

develop名前空間のsocketioと呼ばれるもの、輸入意志はありません前に__init__.py

from develop.controllers.panel import panel_route 

で行があるので、確かに失敗します。

ので、あなたは速い修正のために__init__.pyでコード行の位置を調整する必要があります。しかしそれはまだ良い習慣ではありません、コードは将来リファクタリングされるでしょう。

+0

あなたは今、それは私が右create_app機能上panel_routeをコピーして、アプリがおかげで、本当に感謝、エラーなしで開始働き、正しいです;)。 – reznov11

+0

あなたは大歓迎です – jerliol

関連する問題