Flask说“没有提供FLASK_APP环境变量”

时间:2016-11-15 22:13:22

标签: flask flask-migrate

我正在尝试使用flask run运行Flask应用程序,但无论如何,我收到此错误:

Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.

我在我的项目中使用virtualenv并且我在端口80上运行应用程序,因此我以超级用户身份运行命令。最后,我只需要使用Flask-Migrate docs中所述的flask db init命令,但flask需要能够找到应用程序来执行此操作。这是我尝试过的,没有成功:

导出FLASK_APP环境变量,确保它在我的bash配置文件中,然后激活virtualenv

$ export FLASK_APP=run.py
$ printenv FLASK_APP
run.py
$ . env/bin/activate
(env) $ sudo flask run
Error: Could not locate Flask application. You did not provide the     FLASK_APP environment variable.

激活virtualenv,然后导出FLASK_APP

$ . env/bin/activate
(env) $ export FLASK_APP=run.py
(env) $ printenv FLASK_APP
run.py
(env) sudo flask run
Error: Could not locate Flask application. You did not provide the     FLASK_APP environment variable.

以上两个完整路径/Users/me/code/project/run.py

$ printenv FLASK_APP
/Users/me/code/project/run.py

项目结构

myproject/
    ├──app/
    |  ├── __init__.py
    |  ├── models.py
    |  ├── templates/
    |  └── views.py
    ├── tests/
    ├── run.py
    ├── requirements.txt
    └── config.py

到目前为止,没有任何工作,错误信息在每种情况下都是相同的。我该怎么做才能解决这个错误?

4 个答案:

答案 0 :(得分:8)

假设您在init文件中调用app=App(__name__)。尝试这一点,即使从技术上讲它也应该与run.py一起使用。

export FLASK_APP=app/__init__.py; flask run

稍后尝试执行echo $FLASK_APP以查看值实际是否存储在烧瓶直接访问的环境变量中,而不仅仅是bash配置文件。

答案 1 :(得分:2)

当我从sudo中删除sudo flask run时,Flask会找到$FLASK_APP。但是,我收到错误消息socket.error: [Errno 13] Permission denied。我无法看到解决方法,因为当我以超级用户身份运行时,Flask无法找到$FLASK_APP。好像是循环逻辑。

我设法通过将端口从80更改为5000并使用sudo删除flask run来运行Flask。这很好,但我必须找到一种在生产中在端口80上运行应用程序的方法。

在删除并重新创建数据库并删除对flask db init的调用后,我能够运行db.create_all

编辑 - 4/27/17 端口80确实被我服务器上的防火墙阻止了(防火墙超出了我的控制范围),因此在开放端口上运行应用程序解决了这个问题。

答案 2 :(得分:0)

在Powershell下,您必须按如下所示设置y=5 id(5) id(y) 环境变量:

FLASK_APP

这时,您应该可以在hello_app文件夹中运行$env:FLASK_APP = "webapp" 。换句话说,PowerShell以不同的方式管理环境变量,因此标准命令行python -m flask run无法正常工作。

答案 3 :(得分:0)

如果您使用的是Windows,请确保等号周围没有空格:

set FLASK_APP=app.py

代替

set FLASK_APP = app.py

这就是我发生的事情。由于空格,出现“您未提供FLASK_APP环境变量”错误。