ImportError: 找不到名为 application 的模块
ImportError: 找不到名为 application 的模块
此问题已有答案:
我正在运行一个Flask应用程序,并使用Flask-mysqlAlchemy连接数据库,但在使用Python 2.7运行脚本时出现以下错误。
Traceback (most recent call last): File "app2.py", line 8, in from database.dbconfig import db, myAccounts2 ImportError: No module named database.dbconfig
而在Python 3中运行得很好,我需要在Python 2.7中运行它,因为我的服务器预先安装了它。我无法弄清问题出在哪里。我已在服务器上安装了所有依赖项,但仍然遇到这个问题,而在我的本地机器上使用Python 3却可以正常工作。
这是我的主要脚本
我的目录结构如下
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
admin 更改状态以发布 2023年5月24日
首先,你的数据库文件夹不是一个合适的Python包。
Python中的每个包都是一个目录,它必须包含一个名为
__init__.py
的特殊文件。这个文件可以是空的,并且它表示它包含的目录是一个Python包,所以它可以像导入模块一样导入。
来自Learn Python网站
其次(这只是一个建议),为了强制执行一个正确的命名空间,你应该在你的项目目录下创建一个以你的应用程序命名的包,并置于所有其他包的顶部:
myproject/ requirements.txt setup.cfg ... myapp/ __init__.py app2.py database/ __init__.py dbconfig.py
注意包名应始终小写,如果需要使用下划线作为分隔符,而不是使用破折号。
命名空间将是:
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方法。
最后
扁平比嵌套好
因此,这个目录树可以简化为只包含模型和db对象的database.py文件,以及在myapp/__init__.py
中创建flask应用对象。