将 Flask 设置为为每个环境单独配置时的非现有路径
Non existing path when setting up Flask to have separated configurations for each environment
我为每个环境和一个单独的应用程序分别配置了
目录树如下所示:
myapp
├── __init__.py # empty
├── config
│ ├── __init__.py # empty
│ ├── development.py
│ ├── default.py
│ └── production.py
├── instance
│ └── config.py
└── myapp
├── __init__.py
└── myapp.py
代码
相关代码,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')
myapp/myapp.py
:
from myapp import app
# ...
命令
然后我设置变量:
$export FLASK_APP=myapp.py
并尝试从项目根目录 运行 开发服务器:
$ 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
并且来自项目 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
与另一个 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
其他测试未成功
$ 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
备注:
我没有使用 PYTHON_PATH
变量,它是空的
我已经看过其他相关问题 (Flask: How to manage different environment databases?) 但我的问题是(相对较新的)flask 命令
使用Python 3.5.2+
我花了一段时间终于找到了:
Flask 不喜欢在根级别具有 __init__.py
的项目,请删除 myapp/__init__.py
。这是位于根文件夹中的那个:
myapp
├── __init__.py <--- DELETE
...
└── myapp
├── __init__.py <--- keep
└── myapp.py
使用$ 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
>>>
我为每个环境和一个单独的应用程序分别配置了 目录树如下所示:
myapp
├── __init__.py # empty
├── config
│ ├── __init__.py # empty
│ ├── development.py
│ ├── default.py
│ └── production.py
├── instance
│ └── config.py
└── myapp
├── __init__.py
└── myapp.py
代码
相关代码,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')
myapp/myapp.py
:
from myapp import app
# ...
命令
然后我设置变量:
$export FLASK_APP=myapp.py
并尝试从项目根目录 运行 开发服务器:
$ 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
并且来自项目 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
与另一个 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
其他测试未成功
$ 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
备注:
我没有使用
PYTHON_PATH
变量,它是空的我已经看过其他相关问题 (Flask: How to manage different environment databases?) 但我的问题是(相对较新的)flask 命令
使用Python 3.5.2+
我花了一段时间终于找到了:
Flask 不喜欢在根级别具有
__init__.py
的项目,请删除myapp/__init__.py
。这是位于根文件夹中的那个:myapp ├── __init__.py <--- DELETE ... └── myapp ├── __init__.py <--- keep └── myapp.py
使用
$ 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
>>>