【问题标题】:Non existing path when setting up Flask to have separated configurations for each environment将 Flask 设置为每个环境的单独配置时路径不存在
【发布时间】:2023-03-04 23:22:01
【问题描述】:

我为每个环境和一个单独的应用程序单独配置了 目录树如下:

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 flask environment-variables python-import


    【解决方案1】:

    找了好久终于找到了:

    1. Flask 不喜欢在根级别使用 __init__.py 的项目,请删除 myapp/__init__.py。这是位于根文件夹中的那个:

      myapp
      ├── __init__.py     <--- DELETE
      ...
      └── myapp
          ├── __init__.py  <--- keep
          └── myapp.py
      
    2. 使用$ export FLASK_APP=myapp/myapp.py

    3. 指定配置的环境变量应该是绝对路径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
    >>> 
    

    【讨论】:

    • 我的项目结构完全相同,但我仍然遇到同样的错误。
    • @vishal 你有公共回购吗?
    • @marcaunuy,刚刚创建了一个,github.com/vishalmelmatti/flasktest
    • @vishal 我有一个正在运行的实例,将__init__.py 添加到每个子文件夹并使用export FLASK_APP=Spy/Spy.py,评论来自 Spy.py 的每个导入并开始尝试调试它,一一取消注释。就我而言,我最终使用了PYTHONPATH,你可以看看github.com/marcanuy/notificamesta
    • 我已经在导出 FLASK_APP=Spy/Spy.py。将尝试其他步骤。谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-13
    • 1970-01-01
    相关资源
    最近更新 更多