mar*_*nuy 3 python environment-variables python-import flask
我为每个环境和一个应用程序分开了配置,目录树如下所示:
myapp
??? __init__.py # empty
??? config
? ??? __init__.py # empty
? ??? development.py
? ??? default.py
? ??? production.py
??? instance
? ??? config.py
??? myapp
??? __init__.py
??? myapp.py
Run Code Online (Sandbox Code Playgroud)
相关代码,myapp/__init__.py:
from flask import Flask
app = Flask(__name__, instance_relative_config=True)
app.config.from_object('config.default')
app.config.from_pyfile('config.py')
app.config.from_envvar('APP_CONFIG_FILE')
Run Code Online (Sandbox Code Playgroud)
myapp/myapp.py:
from myapp import app
# ...
Run Code Online (Sandbox Code Playgroud)
然后我设置变量:
$export FLASK_APP=myapp.py
Run Code Online (Sandbox Code Playgroud)
并尝试从项目根目录运行开发服务器:
$ flask run
Usage: flask run [OPTIONS]
Error: The file/path provided (myapp.py) does not appear to exist. Please verify the path is correct. If app is not on PYTHONPATH, ensure the extension is .py
Run Code Online (Sandbox Code Playgroud)
从项目myapp文件夹中:
$ cd myapp
$ flask run
Usage: flask run [OPTIONS]
Error: The file/path provided (myapp.myapp.myapp) does not appear to exist. Please verify the path is correct. If app is not on PYTHONPATH, ensure the extension is .py
Run Code Online (Sandbox Code Playgroud)
使用另一个FLASK_APP变量:
$ export FLASK_APP=myapp/myapp.py
# in project root
$ flask run
Usage: flask run [OPTIONS]
Error: The file/path provided (myapp.myapp.myapp) does not appear to exist. Please verify the path is correct. If app is not on PYTHONPATH, ensure the extension is .py
# moving to project/myapp
$ cd myapp
$ flask run
Usage: flask run [OPTIONS]
Error: The file/path provided (myapp/myapp.py) does not appear to exist. Please verify the path is correct. If app is not on PYTHONPATH, ensure the extension is .py
Run Code Online (Sandbox Code Playgroud)
$ python -c 'import myapp; print(myapp)'
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/user/myapp/myapp/__init__.py", line 6, in <module>
app.config.from_envvar('APP_CONFIG_FILE')
File "/home/user/.virtualenvs/myapp/lib/python3.5/site-packages/flask/config.py", line 108, in from_envvar
variable_name)
RuntimeError: The environment variable 'APP_CONFIG_FILE' is not set and as such configuration could not be loaded. Set this variable and make it point to a configuration file
$ export APP_CONFIG_FILE="/home/user/myapp/config/development.py"
$ python -c 'import myapp; print(myapp)'<module 'myapp' from '/home/user/myapp/myapp/__init__.py'>
$ flask run
Usage: flask run [OPTIONS]
Error: The file/path provided (myapp.myapp) does not appear to exist. Please verify the path is correct. If app is not on PYTHONPATH, ensure the extension is .py
Run Code Online (Sandbox Code Playgroud)
我没有使用PYTHON_PATH变量,它是空的
我已经看到其他相关问题(Flask: How to manage different environment databases?)但我的问题是(相关的新)flask命令
使用 Python 3.5.2+
我花了一段时间,但我终于找到了:
Flask 不喜欢__init__.py根级别为 delete 的项目myapp/__init__.py。这是位于根文件夹中的那个:
myapp
??? __init__.py <--- DELETE
...
??? myapp
??? __init__.py <--- keep
??? myapp.py
Run Code Online (Sandbox Code Playgroud)用 $ export FLASK_APP=myapp/myapp.py
指定配置的环境变量应该是它的绝对路径:export APP_CONFIG_FILE="/home/user/myapp/config/development.py"
现在一切正常 \o/
$ flask run
* Serving Flask app "myapp.myapp"
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
$ flask shell
Python 3.5.2+ (default, Sep 22 2016, 12:18:14)
[GCC 6.2.0 20160927] on linux
App: myapp
Instance: /home/user/myapp/instance
>>>
Run Code Online (Sandbox Code Playgroud)