ImportError:没有名为application的模块

时间:2017-07-12 19:52:06

标签: python python-2.7 flask flask-sqlalchemy

当我使用python 2.7运行我的脚本时,我正在运行一个烧瓶应用程序并使用Flask-mysqlAlchemy连接到数据库我收到以下错误。

Traceback (most recent call last):
  File "app2.py", line 8, in <module>
    from database.dbconfig import db, myAccounts2
ImportError: No module named database.dbconfig

虽然这在python3中正常运行但我需要在python 2.7中运行,因为我的服务器已经预先安装了它。我无法弄清问题是什么。我已经在我的服务器中安装了所有依赖项,并继续使用python3在本地计算机上工作。

这是我的主要脚本

我的目录是这样的

Main folder
|
+--->database
|   |
|   +------> dbconfig.py
|   
+----->app2.py  

这是我的app2.py

#!usr/bin/python
import boto3
import json
import urllib2
import urlparse
#import urllib.request
#import urllib.parse
from database.dbconfig import db, myAccounts2
from flask_sqlalchemy import SQLAlchemy
from flask import Flask,render_template,jsonify,json,request

application = Flask(__name__)

这是我的dbconfig.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:password@pushbuttontest.us-east-1.rds.amazonaws.com:3306/test_pb'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']= 'False'
app.config['SECRET_KEY'] = "random string22"
db = SQLAlchemy(app)

class myAccounts2(db.Model):
    #__tablename__ = 'myAccounts'
    id = db.Column(db.Integer, primary_key=True)
    account_name = db.Column(db.String(45), primary_key=True)
    vpc = db.Column(db.String(55))
    subnet = db.Column(db.String(55))
    instance_type = db.Column(db.String(90))

    def __init__(self,  account_name, vpc, subnet, instance_type):
        #self.id = id
        self.account_name = account_name
        self.vpc=vpc
        self.subnet=subnet
        self.instance_type=instance_type

2 个答案:

答案 0 :(得分:2)

我认为使用Python 2,你必须放一个空的

__init__.py 

文件 在您的数据库目录中

答案 1 :(得分:0)

首先,您的数据库文件夹不是合适的python包。

  

Python中的每个包都是一个必须包含一个名为__init__.py.的特殊文件的目录。这个文件可以是空的,它表示它包含的目录是一个Python包,因此它可以以相同的方式导入模块可以导入。   From learn python website

第二个(这只是一个建议),要强制执行正确的命名空间,您应该在项目目录中创建一个以应用程序命名的包,并在所有其他包之上:

myproject/
  requirements.txt
  setup.cfg
  ...
  myapp/
     __init__.py
     app2.py
     database/
         __init__.py
         dbconfig.py

请注意,包名称double应始终为小写,如果需要,请使用下划线作为分隔符而不是破折号。

命名空间将是:

myapp.database.dbconfig.db

所以从app2.py可以做到例如:

from .database.dbconfig import db

此外,您的代码在app2.py和dbconfig.py中声明了flask对象。 因此,app2.py模块中的application对象未绑定到Sqlalchemy对象。您应该在dbconfig中声明您的db,然后在app2.py中导入它并使用init_app方法。

最后

  

flat比嵌套

更好      

Zen of python

因此,这个树可以简化为只包含模型和db对象的database.py以及myapp/__init__.py

中的flask应用程序对象创建