【问题标题】:Flask: ModuleNotFoundError when use `flask run` but able to run app using `python app.py`Flask:使用`flask run`时出现ModuleNotFoundError但能够使用`python app.py`运行应用程序
【发布时间】:2020-01-31 23:01:57
【问题描述】:

我可以使用python app.py 运行我的烧瓶应用程序,但是如果我尝试flask runflask shell 我会收到以下错误:

(venv) C:\Users\Arrchana\PycharmProjects\ie-backend>flask run
 * Serving Flask app "app.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
Usage: flask run [OPTIONS]

Error: While importing "ie-backend.app", an ImportError was raised:

Traceback (most recent call last):
  File "c:\users\arrchana\pycharmprojects\ie-backend\venv\lib\site-packages\flask\cli.py", line 240, in locate_app
    __import__(module_name)
  File "C:\Users\Arrchana\PycharmProjects\ie-backend\app.py", line 3, in <module>
    from routes import api_dev
ModuleNotFoundError: No module named 'routes'

这是我的应用程序结构(缺少一些文件和模块):

ie-backend/
    appInits/
        __init__.py
        dp.py
    models/
        __init__.py
        user.py
    app.py
    config.py
    routes.py

我在 app.py 中导入配置没有问题,但是在尝试导入路由、appInits 和模型时出现 ModuleNotFoundError。当我运行 flask shell 时,我得到了同样的错误。

我的 app.py 文件如下所示:

from flask import Flask
from config import Config
from flask_script import Manager
from flask_migrate import MigrateCommand

from routes import api_dev
from appInits.db import db
from appInits import jwt

from models.user import UserModel

app = Flask(__name__)
app.config.from_object(Config)

app.register_blueprint(api_dev, url_prefix='/dev')

db.init_app(app)

migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)

if __name__ == "__main__":
    app.run(debug=Config.DEBUG)

我在路由等中没有循环导入。我的 FLASK_APP=app.py。

【问题讨论】:

  • 你能把完整的跟踪记录回来,以便任何人都能得到它并提供帮助
  • 你可以使用任何其他烧瓶命令吗?只是run 不起作用吗?当你运行flask shell时你会得到什么?
  • flask shell 也会导致相同的错误消息

标签: python flask error-handling python-import


【解决方案1】:

ie-backend下添加__init__.py

在导入前添加.

from .routes import api_dev
from .appInits.db import db
from .appInits import jwt

【讨论】:

  • 添加 .在我使用的进口商品之前
【解决方案2】:

尝试在导入前添加 ie-backend.,例如 from ie-backend.routes import api_dev 等。

【讨论】:

  • 那行不通。当我这样做时出现以下错误:未解决的参考ie-backend
猜你喜欢
  • 1970-01-01
  • 2021-12-10
  • 1970-01-01
  • 2018-09-04
  • 1970-01-01
  • 2015-06-16
  • 1970-01-01
  • 1970-01-01
  • 2021-10-18
相关资源
最近更新 更多