Flask - Невозможно загрузить файл конфигурации - PullRequest
0 голосов
/ 30 января 2020

У меня проблема при попытке загрузить пользовательские Flask объекты разработки.

Это моя Flask структура приложения /home/sincorchetes/Projects/flask/my_app:

├── app.py
├── __init__.py
├── instance
│   └── config.cfg
├── __pycache__
│   ├── app.cpython-37.pyc
│   └── __init__.cpython-37.pyc
└── static
    ├── css
    ├── images
    └── js

Я установил это в app.py

from flask import Flask 
import os

app = Flask(__name__,instance_path=os.getcwd() + '/instance/') 
app.config.from_pyfile('config.cfg')
app.config.from_object('config.DevelopmentConfig')


@app.route('/') 
def hello_world(): 
    return 'Hello to the World of Flask!' 

if __name__ == '__main__': 
    app.run() 

Я запускаю:

cd /home/sincorchetes/Projects/flask/my_app
export FLASK_APP=app.py
flask run

Я получаю:

 * Serving Flask app "app.py"
 * Environment: production
   WARNING: This is a development server. Do not use it in a production deployment.
   Use a production WSGI server instead.
 * Debug mode: off
Traceback (most recent call last):
  File "/home/sincorchetes/Projects/flask/bin/flask", line 8, in <module>
    sys.exit(main())
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/flask/cli.py", line 966, in main
    cli.main(prog_name="python -m flask" if as_module else None)
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/flask/cli.py", line 586, in main
    return super(FlaskGroup, self).main(*args, **kwargs)
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/click/core.py", line 717, in main
    rv = self.invoke(ctx)
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/click/core.py", line 1137, in invoke
    return _process_result(sub_ctx.command.invoke(sub_ctx))
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/click/core.py", line 956, in invoke
    return ctx.invoke(self.callback, **ctx.params)
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/click/decorators.py", line 64, in new_func
    return ctx.invoke(f, obj, *args, **kwargs)
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/click/core.py", line 555, in invoke
    return callback(*args, **kwargs)
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/flask/cli.py", line 848, in run_command
    app = DispatchingApp(info.load_app, use_eager_loading=eager_loading)
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/flask/cli.py", line 305, in __init__
    self._load_unlocked()
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/flask/cli.py", line 330, in _load_unlocked
    self._app = rv = self.loader()
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/flask/cli.py", line 388, in load_app
    app = locate_app(self, import_name, name)
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/flask/cli.py", line 240, in locate_app
    __import__(module_name)
  File "/home/sincorchetes/Projects/flask/projectio/app.py", line 7, in <module>
    app.config.from_pyfile('config.cfg')
  File "/home/sincorchetes/Projects/flask/lib64/python3.7/site-packages/flask/config.py", line 131, in from_pyfile
    with open(filename, mode="rb") as config_file:
FileNotFoundError: [Errno 2] Unable to load configuration file (No such file or directory): '/home/sincorchetes/Projects/flask/my_app/config.cfg'

Почему требуется каталог приложений "root" и избежать instance_path установить в заголовке файла?

1 Ответ

0 голосов
/ 30 января 2020

Вы можете использовать:

app = Flask(__name__)

без указания instance_path , таким образом, он рассчитывается для вас:

Если instance_path параметр не указан, используются следующие местоположения по умолчанию:

  • Деинсталлированный модуль:

    /myapp.py
    /instance
    
  • Деинсталлированный пакет:

    /myapp
        /__init__.py
    /instance
    
  • Установленный модуль или пакет:

    $PREFIX/lib/python2.X/site-packages/myapp
    $PREFIX/var/myapp-instance
    

    $ PREFIX - это префикс вашей Python установки. Это может быть / usr или путь к вашему virtualenv. Вы можете напечатать значение sys.prefix, чтобы увидеть, какой префикс установлен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...