Flask 앱을 ​​디버깅하는 방법


134

Flask의 오류를 어떻게 디버깅 하시겠습니까? 콘솔로 인쇄 하시겠습니까? 페이지에 플래시 메시지가 있습니까? 아니면 무언가 잘못되었을 때 무슨 일이 일어나고 있는지 알아낼 수있는 더 강력한 옵션이 있습니까?


5
app.run()(디버그를 켜거나 끄는) 마술은 없습니다 . Flask는 다른 Python 응용 프로그램과 같이 작동하므로 Python 응용 프로그램을 디버깅하는 것과 같은 방식으로 디버깅 할 수 있습니다. 로깅을 사용하려면 로깅을 사용하십시오. 인쇄하려면 인쇄를 사용하십시오. 원하는 경우 디버거를 사용할 수도 있습니다.
Mark Hildreth

답변:


128

개발 모드에서 앱을 실행하면 오류가있을 때 브라우저에 대화 형 추적 및 콘솔이 표시됩니다. 개발 모드에서 실행하려면 FLASK_ENV=development환경 변수를 설정 한 다음 flask run명령 을 사용하십시오 ( FLASK_APP앱도 가리켜 야 함).

Linux, Mac, Windows 용 Linux 하위 시스템, Windows의 Git Bash 등 :

export FLASK_APP=myapp
export FLASK_ENV=development
flask run

Windows CMD set의 경우 내보내기 대신 사용하십시오 .

set FLASK_ENV=development

PowerShell의 경우 다음을 사용하십시오 $env.

$env:FLASK_ENV = "development"

Flask 1.0 이전에는 FLASK_DEBUG=1환경 변수 로 제어되었습니다 .

명령 app.run()대신 메소드를 사용하는 경우 디버그 모드를 사용하도록 flask run전달 debug=True하십시오.

개발 모드와 상관없이 서버를 실행하는 터미널에 역 추적도 인쇄됩니다.

PyCharm, VS Code 등을 사용하는 경우 디버거를 활용하여 중단 점으로 코드를 단계별로 실행할 수 있습니다. 실행 구성은을 호출하는 스크립트를 app.run(debug=True, use_reloader=False)가리 키거나 스크립트를 가리키고 venv/bin/flask명령 줄에서와 같이 사용할 수 있습니다. 리 로더를 비활성화 한 상태로 둘 수 있지만 다시로드하면 디버깅 컨텍스트가 종료되고 중단 점을 다시 잡아야합니다.

set_trace디버깅을 시작하려는 뷰 를 호출하여 pdb, pudb 또는 다른 터미널 디버거를 사용할 수도 있습니다 .


블록을 제외하고 너무 넓지 않게 사용하십시오. 모든 코드를 포괄으로 try... except...묶으면 디버깅하려는 오류가 사라집니다. Flask는 디버거 또는 500 오류를 표시하고 콘솔에 트레이스 백을 인쇄하여 이미 예외를 처리하므로 일반적으로 필요하지 않습니다.


38

당신은 사용할 수 있습니다 app.run(debug=True)에 대한 WERKZEUG 디버거 편집 아래에 언급 한 바와 같이, 나는 알고 있어야합니다.


7
실제로, 당신과 함께 실행할 때 debug=True실제로 Werkzeug 디버거를 사용하고 있기 때문에 어느 쪽도 아니거나 ;-)가 아닙니다.
Sean Vieira

하 맞아. Flask의 setup.py에서 요구 사항을 살펴 봐야한다고 생각합니다. Werkzeug를 수동으로 초기화 해야하는 GAE에서 작업하기 위해 수정 된 사본을 사용합니다.
bnlucas 2016 년

app.run (debug = True)을 설정했습니다. xyz를 인쇄 할 위치를 인쇄하면 감사합니다
Kimmy

를 사용 print 'xyz'하면 콘솔에 인쇄됩니다. 브라우저에서 디버깅하려면 디버깅하려는 위치에 오류를 강제로 적용해야합니다. raise Exception('xyz'). 브라우저 창에 디버그가 출력됩니다.
bnlucas

25

로부터 1.1.x문서 , 당신은 당신의 쉘 프롬프트에 환경 변수를 내보내기하여 디버그 모드를 활성화 할 수 있습니다 :

export FLASK_APP=/daemon/api/views.py  # path to app
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

4
이 답변은 실제로 디버그 모드가 무엇인지 설명하면 더 유용합니다. 브라우저에서 디버깅을 허용하는 것 이상을 수행합니까? 불행히도 REST API를 사용하고 있기 때문에 실제로 도움이되지 않습니다.
Michael Scheper

스 니펫을 어디에 두나요?
mLstudent33

1
셸에서 @ mLstudent33
Édouard Lopez

16

또한 Flask Debug Toolbar 확장을 사용하여 렌더링 된 페이지에 포함 된보다 자세한 정보를 얻을 수 있습니다.

from flask import Flask
from flask_debugtoolbar import DebugToolbarExtension
import logging

app = Flask(__name__)
app.debug = True
app.secret_key = 'development key'

toolbar = DebugToolbarExtension(app)

@app.route('/')
def index():
    logging.warning("See this message in Flask Debug Toolbar!")
    return "<html><body></body></html>"

다음과 같이 응용 프로그램을 시작하십시오.

FLASK_APP=main.py FLASK_DEBUG=1 flask run

12

Visual Studio Code를 사용하는 경우 교체

app.run(debug=True)

app.run()

내부 디버거를 켜면 VS 코드 디버거가 비활성화됩니다.


3
작동중인 설정의 예를 공유 할 수 있습니까? 내 환경에 FLASK_APP가 이미 정의되어 있으며 기본 구성이 작동하지 않습니다. 나는 이것을 시도했습니다 -pastebin.com/v8hBQ2vv 및 수많은 유사한 순열이지만 아무 소용이 없습니다.
Brandon Dube

12

플라스크 앱을 디버깅하려면 플라스크 앱이있는 폴더로 이동하십시오. 가상 환경을 활성화하고 콘솔의 "mainfilename"변경 사항을 플라스크 기본 파일로 붙여 넣는 것을 잊지 마십시오.

export FLASK_APP="mainfilename.py"
export FLASK_DEBUG=1
python -m flask run --host=0.0.0.0

플라스크 앱에 디버거를 활성화하면 거의 모든 오류가 콘솔 또는 브라우저 창에 인쇄됩니다. 무슨 일이 일어나고 있는지 알아 내려면 간단한 print 문을 사용하거나 javascript 코드에 console.log ()를 사용할 수도 있습니다.


5

python-dotenv가상 환경에 설치 하십시오.

프로젝트 루트에 .flaskenv를 만듭니다. 프로젝트 루트는 app.py 파일이있는 폴더를 의미합니다.

이 파일 안에 다음을 작성하십시오.

FLASK_APP=myapp 
FLASK_ENV=development

이제 다음 명령을 발행하십시오.

flask run

나에게 작동하지 않습니다 ... 디버그 모드를 계속 표시합니다 : 꺼짐
Federico Gentile

3

플라스크에서 디버그 모드를 활성화하려면 Windows FLASK_DEBUG=1에서 set 을 입력 하고 Linux 터미널로 CMD내보내고 FLASK_DEBUG=1앱을 다시 시작하면됩니다.


2

빠른 팁-PyCharm을 사용하는 경우 Edit Configurations=> 로 이동하여 확인란을 Configurations활성화 FLASK_DEBUG하고를 다시 시작하십시오 Run.


2
이 확인란을 PyCharm Professional에서만 사용할 수 있다는 것을 추가 할 수 있습니다. 참조 : jetbrains.com/help/pycharm/…
cyroxx

1

개발 환경에서 로거 및 인쇄 문을 사용하면 프로덕션 환경의 경우 보초로 갈 수 있습니다.


1

Windows 사용자의 경우 :

Powershell을 열고 프로젝트 디렉토리로 cd하십시오.

Powershell에서이 특공대를 사용하면 다른 모든 기능은 Powershell에서 작동하지 않습니다.

$env:FLASK_APP = "app"  
$env:FLASK_ENV = "development"

-1

로컬로 실행 중이고 코드를 단계별로 실행하려는 경우 :

python -m pdb script.py


이것은 플라스크 앱에는 전혀 적용되지 않습니다
CornSmith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.