ImportError: 找不到名为 application 的模块

17 浏览
0 Comments

ImportError: 找不到名为 application 的模块

此问题已有答案

__init__.py是什么?

我正在运行一个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日
0
0 Comments

首先,你的数据库文件夹不是一个合适的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方法。

最后

扁平比嵌套好

Python之禅

因此,这个目录树可以简化为只包含模型和db对象的database.py文件,以及在myapp/__init__.py中创建flask应用对象。

0
0 Comments

我认为在Python 2中,你需要在数据库目录中放置一个空的

__init__.py 

文件。

0