Flask说"没有提供FLASK_APP环境变量"

ros*_*din 5 flask flask-migrate

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

Error: Could not locate Flask application. You did not provide the FLASK_APP environment variable.
Run Code Online (Sandbox Code Playgroud)

我在我的项目中使用virtualenv,我在端口80上运行应用程序,所以我以超级用户身份运行命令.最后,我只需要使用flask db initFlask-Migrate 文档中描述的命令,但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.
Run Code Online (Sandbox Code Playgroud)

激活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.
Run Code Online (Sandbox Code Playgroud)

以上两条全路径, /Users/me/code/project/run.py

$ printenv FLASK_APP
/Users/me/code/project/run.py
Run Code Online (Sandbox Code Playgroud)

项目结构

myproject/
    ???app/
    |  ??? __init__.py
    |  ??? models.py
    |  ??? templates/
    |  ??? views.py
    ??? tests/
    ??? run.py
    ??? requirements.txt
    ??? config.py
Run Code Online (Sandbox Code Playgroud)

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

u2g*_*les 17

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

set FLASK_APP=app.py
Run Code Online (Sandbox Code Playgroud)

代替

set FLASK_APP = app.py
Run Code Online (Sandbox Code Playgroud)

这就是发生在我身上的事情。由于空格,我收到“您没有提供 FLASK_APP 环境变量”错误。


oxa*_*org 9

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

export FLASK_APP=app/__init__.py; flask run
Run Code Online (Sandbox Code Playgroud)

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

  • `app/__init__.py` 是应用程序主脚本的路径,不是吗?你值得一枚奖牌。 (2认同)

小智 8

在Powershell下,您必须FLASK_APP按如下方式设置环境变量:

$env:FLASK_APP = "webapp"
Run Code Online (Sandbox Code Playgroud)

然后您应该能够python -m flask run在 hello_app 文件夹中运行。换句话说,PowerShell 以不同的方式管理环境变量,因此标准命令set FLASK_APP=webapp行将不起作用。


ros*_*din 5

当我sudo离开时sudo flask run,Flask 发现$FLASK_APP. 但是,我收到错误消息socket.error: [Errno 13] Permission denied。我看不到解决这个问题的方法,因为$FLASK_APP当我以超级用户身份运行时Flask 找不到。好像是循环逻辑。

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

我能够运行flask db init删除和重建我的数据库,并删除呼叫后db.create_all

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