问题描述
我正在尝试设置一个在 Python 3.7.x 上运行的 Flask 应用程序。我在网上参考了很多教程,但似乎无法解决这个 ModuleNotFoundError 问题,并且没有一个 stackoverflow 问题是相关的。
以下是我的项目结构:
project/
app/
__init__.py
api.py
conf.py
models.py
schema.py
orders-mgmt.toml
requirements.txt
README.md
# app/__init__.py
from flask import Flask
from flask_restful import Api
from app.conf import load_from_toml
import logging
import os.path
if os.path.isfile('/opt/project/orders-mgmt.toml'):
config = load_from_toml('/opt/project/orders-mgmt.toml')
else:
config = load_from_toml()
app = Flask(__name__)
api = Api(app)
app.config['sqlALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['sqlALCHEMY_DATABASE_URI'] = config['MysqL']['db_uri']
app.config['sqlALCHEMY_ENGINE_OPTIONS'] = {
'pool_recycle': 3000,'pool_pre_ping': True,}
# app/api.py
from flask import jsonify
from flask_restful import Resource
from flask_sqlalchemy import sqlAlchemy
from app import app,api,config #ERROR here
from app.models import Request
from app.schema import RequestSchema
db = sqlAlchemy(app)
class TestGet(Resource):
def get(self):
return 'okay'
api.add_resource(TestGet,'/')
if __name__ == '__main__':
app.run(debug=True,host='localhost',port=5000)
当我运行 ModuleNotFoundError
时,我在 app/api.py
行 from app import app,config
中得到 python app/api.py
:
$ python app/api.py
Traceback (most recent call last):
File "app/api.py",line 4,in <module>
from app import app,config
ModuleNotFoundError: No module named 'app'
我可以知道我的 Flask 应用程序有什么问题吗?
解决方法
你有循环依赖问题 您的应用程序将无法在此类文件结构中运行 将逻辑从 init 模块删除到另一个模块,或者您需要删除所有绝对导入(为您自己的模块导入)并将它们替换为相对
对于 __init__
模块
替换这一行:
from app.conf import load_from_toml
与
from .conf import load_from_toml
对于 app
模块
替换这些行:
from app import app,api,config #ERROR here
from app.models import Request
from app.schema import RequestSchema
与
from . import app,config
from .models import Request
from .schema import RequestSchema