Flask-Migrate 命令“flask db init”找不到应用程序文件

问题描述 投票:0回答:8

首先,我正在关注此处发布的 Python Flask 教程:https://scotch.io/tutorials/build-a-crud-web-app-with-python-and-flask-part-one

一切都很顺利,直到“迁移”部分执行:

$ flask db init

...失败并出现以下错误:

Usage: flask db init [OPTIONS]

Error: The file/path provided (run) does not appear to exist.  Please verify the path is correct.  If app is not on PYTHONPATH, ensure the extension is .py

我知道 $FLASK_APP 环境变量已设置,因为此命令执行良好:

$ flask run

任何人都可以建议为什么在运行应用程序时执行得很好,但在尝试创建迁移存储库时却执行得不好?

我能在其他地方找到的关于该主题的最接近的信息是:Flask 无法找到应用程序文件,但是使用

python -m
进行预挂起对我来说在任何情况下都不起作用。

python flask flask-sqlalchemy flask-migrate
8个回答
7
投票

就我而言,我必须这样做

python3 -m flask db init

不提python3 -m,它显示

zsh: command not found: flask

3
投票

命令

flask run
成功启动了应用程序。

命令

flask db init
失败,并出现问题中报告的错误。

所以我尝试了

python run.py
,但未能通过报告
models.py
中未满足的依赖关系来启动应用程序,这实际上是导入中的拼写错误。修复拼写错误并重新运行
python run.py
成功了。

然后我又尝试了

flask run
,还是没问题。然后
flask db init
...终于成功了。

报告的错误似乎无法找到

run.py
,这要么是误导,要么掩盖了它可以执行的真正根本原因。


3
投票

就我而言,我的应用程序名称不同,在目录中,我有两个烧瓶应用程序

app.py
app_async.py
我也遇到了相同的迁移密钥错误,所以这就是我解决它的方法:

FLASK_APP=app_async.py flask db init

这里我提到了应用程序名称,然后运行了命令。


0
投票

这对我有用:

pip install flask-migrate --upgrade

0
投票

我遇到了同样的问题,过了一段时间我注意到设置 FLASK_APP=my_app,但我有一个处理创建和初始化应用程序的函数,所以我更改了设置 FLASK_APP=my_app:crate_flask_app,最后它对我有用。 例如:在 my_app/init.py

migrate=Migrate()
db=Sqlalchemy()
defcreate_flask_app():
 app=Flask(__name__)
 db.init_app(app)
 migrate.init_app(app,db)
 return app

Windows 的解决方案是在声明 FLASK_APP 环境变量时,如果任何函数是创建应用程序的一部分,则应在冒号后给出该函数 i,e:set FLASK_APP:create_flask_app


0
投票

问题是您没有正确调用命令。语法是,假设您使用工厂函数来与工厂模式保持一致:

flask --app module_name:factory_fn_name db init. 

如果您不使用工厂模式,事情会简化为:

flask --app module_name db init

0
投票

如果您使用应用程序工厂,那么您应该调用 init_app 就像在数据库实例上调用它一样。

from flask_migrate import Migrate

db = SQLAlchemy()
migrate = Migrate()

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    migrate.init_app(app, db)
    return app

0
投票

我遇到了完全相同的问题,但经过仔细检查,我得到了

migrate = Migrate(app)
而不是
migrate = Migrate(app, db)

© www.soinside.com 2019 - 2024. All rights reserved.