Не работает отладка flask (debug)
Запускаю код в отладке:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hi'
if __name__ == '__main__':
app.run()
но отладка не работает, выкидывая ошибку:
Причем, если запустить под отладкой подобный код:
def plus(a, b):
return a + b
if __name__ == '__main__':
print(plus(3, 4))
то работает нормально.
Подскажите, пожалуйста, кто знает, в чем причина ошибки работы отладки?
Ответы (2 шт):
Похоже, что при запуске под отладчиком падает при передаче __name__, когда оно равно '__main__', т.е. когда модуль не импортирован, а запущен.
Скорее всего падение связано с тем, что при отладке скрипт запускается не напрямую, а через хелпер отладчика. У меня в консоли PyCharm при запуске пишет вот такое:
/usr/bin/python3.8 /snap/pycharm-professional/252/plugins/python/helpers/pydev/pydevd.py --multiproc --qt-support=auto --client 127.0.0.1 --port 33461 --file /home/user/Projects/testflaskdebug/test.py
Connected to pydev debugger (build 212.4746.96)
При запуске без отладчика:
/usr/bin/python3.8 /home/user/Projects/testflaskdebug/test.py
Варианты решения:
Если используете PyCharm Professional, то запускать с помощью конфигурации "Flask Server", а не просто "Python"
Первый параметр класса
Flaskназываетсяimport_name(т.е. импортируемое имя), как вариант можно передавать имя текущего модуля из глобальной переменной__file__, например так:from pathlib import Path from flask import Flask # Если имя файла модуля test.py, то будет передано 'test' app = Flask(Path(__file__).stem) ...Передать вообще любую строку кроме
'__main__', и чтобы она не была похожа на имя файла, например со строкойapp = Flask("sdfsdf sdf")запустится нормально, аapp = Flask("sdfsdf.sdf")упадет с ошибкой. Но в целом надежнее использовать предыдущий вариант.
Вариант, который не сработал:
При запуске через конфигурацию "Flask Server" PyCharm Professional выводит в консоль следующее:
FLASK_APP = test.py
FLASK_ENV = development
FLASK_DEBUG = 0
In folder /home/user/Projects/testflaskdebug
Т.е. заполняются некоторые переменные окружения и указывается текущая директория.
Пробовал добавлять те же переменные окружения в конфигурации запуска (поле Environment variables), указывать рабочую директорию (поле "Working directory"), но это не помогло, при запуске под отладчиком падает с тем же исключением.
Третий вариант сработал, спасибо. Не понятно только, в чем все же причина.
Вариант 4. Если создать файл app.py и уже из него запускать приложение/дебаг, то все работает 'ok':
app.py
------
from main import app
if __name__ == '__main__':
app.run()
main.py
-------
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return 'hi'

