我正在尝试使用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
到目前为止,没有任何工作,错误信息在每种情况下都是相同的。我该怎么做才能解决这个错误?
答案 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环境变量”错误。