关于python:importError:没有名为application的模块No module named application

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模块中的application对象没有绑定到sqlAlchemy对象。您应该在dbconfig中声明数据库,然后在app2.py中导入它,并使用in it_-app方法。

终于

flat is better than nested

Zen of python

所以这个树可以简化为一个database.py,其中包含模型和db对象,以及在myapp/__init__.py中创建flask app对象。