ModuleNotFoundError 无法从 app.__init__.py 导入

问题描述

我正在尝试设置一个在 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.pyfrom 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