ImportError: No module named application
我正在运行一个flask应用程序,并使用flask mysqlAlchemy连接到数据库,当我使用python 2.7运行脚本时,我遇到了下面的错误。
1 2 3 4 | 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的本地计算机中工作。
这是我的主要剧本
我的目录是这样的
1 2 3 4 5 6 7 | Main folder | +--->database | | | +------> dbconfig.py | +----->app2.py |
这是我的预约2.py
1 2 3 4 5 6 7 8 9 10 11 12 | #!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
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:[email protected]: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 |
我想用python 2,你必须把一个空的
1 | __init__.py |
文件在数据库目录中
首先,您的数据库文件夹不是一个合适的python包。
Each package in Python is a directory which MUST contain a special file called
__init__.py. This file can be empty, and it indicates that the directory it contains is a Python package, so it can be imported the same way a module can be imported.
From learn python website
其次(这只是一个建议),为了强制使用适当的名称空间,您应该在项目目录内和其他所有包之上创建一个以应用程序命名的包:
1 2 3 4 5 6 7 8 9 10 | myproject/ requirements.txt setup.cfg ... myapp/ __init__.py app2.py database/ __init__.py dbconfig.py |
请注意,包名称double始终是小写的,如果需要,请使用下划线作为分隔符,而不是破折号。
命名空间将是:
1 | myapp.database.dbconfig.db |
因此,从app2.py可以执行以下操作:
1 | from .database.dbconfig import db |
另外,代码在app2.py和dbconfig.py中声明flask对象。因此,app2.py模块中的
终于
flat is better than nested
Zen of python
所以这个树可以简化为一个database.py,其中包含模型和db对象,以及在