从Flask中的__init__导入

时间:2017-03-07 03:09:47

标签: python flask python-import

我想从我的__init__文件中导入一个类。但我没有成功导入它。这是我的目录结构

/fitBody_app
  /fitBody
    /static
    /templates
    __init__.py
    models.py
    views.py

run.py

这些是我__init__.py文件的所有导入:

import os

from flask import Flask
from flask_admin import Admin
from flask_admin.contrib.sqla import ModelView
from flask_sqlalchemy import SQLAlchemy
from wtforms import fields, widgets

from fitBody.views import my_app
from flask_bootstrap import Bootstrap

app = Flask(__name__)
db = SQLAlchemy(app)

这些是我views.py文件中的所有导入:

import bcrypt
from flask import flash, redirect, render_template, request, session, Blueprint, url_for
from fitBody.models import RegistrationForm
from fitBody.models import cursor, conn
from fitBody import db

my_app = Blueprint('fitBody', __name__)

<......>

当我尝试运行该文件时,这是我的追溯:

Traceback (most recent call last):
  File "/Users/kai/github-projects/fitBody_app/run.py", line 1, in <module>
    from fitBody import app
  File "/Users/kai/github-projects/fitBody_app/fitBody/__init__.py", line 9, in <module>
    from fitBody.views import fitBody
  File "/Users/kai/github-projects/fitBody_app/fitBody/views.py", line 8, in <module>
    from fitBody import db
ImportError: cannot import name 'db'

我曾经想过,因为我从同一个文件夹中导入,所以可以像这样导入。

如何从db文件中导入__init__.py对象?

2 个答案:

答案 0 :(得分:2)

由于views.py使用db,因此导入语句应该在db defination之后。或者为了更好的设计,将蓝图移动到另一个文件,并将蓝图保留在该文件中:

#__init__.py
app = Flask(__name__)
db = SQLAlchemy(app)

from fitBody.views import my_app

答案 1 :(得分:1)

与从views.py文件导入没有任何关系。您的__init__.py正在从您的__init__.py文件导入,而views.py文件正在从models.py导入,这是一个导入周期。我不确定您的db是怎样的,但是如何在models.py中初始化__init__.py并从views.py导入models.pyfrom keras.models import Sequential from keras.layers import Dense import theano import theano.tensor as T seed = 150 np.random.seed(seed) # Define Model model = Sequential() model.add(Dense(500, input_dim=6, init='uniform', activation='relu')) model.add(Dense(6, init='uniform', activation='softmax')) def customObjective(y_true, y_pred): cce = T.nnet.categorical_crossentropy(y_pred, y_true) return cce model.compile(loss=customObjective, optimizer='adam',metrics= ["hinge"]) kf = KFold(n_splits=5) Y = trainData['label'].as_matrix() X = trainData[['input','feat1','feat2','feat3','feat4','feat5']].as_matrix() for train, test in kf.split(trainData): trainX = X[train] print trainX.shape trainY = Y[train] print trainY.shape testX = X[test] testY = Y[test] **model.fit(trainX, trainY, nb_epoch=25, batch_size=1)** # Error on this line print("[INFO] evaluating on testing set...") (loss, accuracy) = model.evaluate(testData, testLabels, batch_size=128, verbose=1) print("[INFO] loss={:.4f}, accuracy: {:.4f}%".format(loss,accuracy * 100)) }