[python] 코드 변경시 Python Flask 앱 자동 재로드

파이썬으로 괜찮은 웹 앱을 개발하는 방법을 조사 중입니다. 고차원 적 구조를 원하지 않기 때문에 저의 선택은 가벼운 Flask 프레임 워크 에 떨어졌습니다 . 이것이 올바른 선택인지 시간이 알려줄 것입니다.

이제 mod_wsgi를 사용하여 Apache 서버를 설정했으며 테스트 사이트가 제대로 실행되고 있습니다. 그러나 필자가 작성한 py 또는 템플릿 파일의 변경 사항이 있으면 사이트를 자동으로 다시로드하여 개발 루틴의 속도를 높이고 싶습니다. 사이트의 .wsgi 파일을 변경하면 다시로드가 발생하지만 (아파치 구성 파일에 WSGIScriptReloading On이 없어도) 수동으로 생성해야합니다 (예 : 추가 줄 바꿈 삽입, 저장). 앱의 일부 py 파일을 편집 할 때 다시로드하는 방법이 있습니까? 또는 .wsgi 파일을 새로 고치는 IDE를 사용해야합니까?



답변

현재 권장되는 방법은 flask명령 행 유틸리티를 사용하는 것입니다.

https://flask.palletsprojects.com/en/1.1.x/quickstart/#debug-mode

예:

$ export FLASK_APP=main.py
$ export FLASK_ENV=development
$ flask run

또는 하나의 명령으로 :

$ FLASK_APP=main.py FLASK_ENV=development flask run

기본 ( 5000) 추가 --port옵션 과 다른 포트를 원할 경우

예:

$ FLASK_APP=main.py FLASK_ENV=development flask run --port 8080

더 많은 옵션을 사용할 수 있습니다 :

$ flask run --help


답변

테스트 / 개발 환경에 대해 이야기하는 경우 디버그 옵션을 사용하십시오. 코드가 변경되면 플라스크 앱을 자동으로 다시로드합니다.

app.run(debug=True)

또는 껍질에서 :

$ export FLASK_DEBUG=1
$ flask run

http://flask.pocoo.org/docs/quickstart/#debug-mode


답변

테스트 / 개발 환경에서

werkzeug 디버거에는 이미 다음 중 하나를 수행하여 활성화 할 수있는 ‘자동 재로드’기능이 있습니다.

app.run(debug=True)

또는

app.debug = True

필요한 경우 별도의 구성 파일을 사용하여 모든 설정을 관리 할 수도 있습니다. 예를 들어 ‘DEBUG = True’옵션과 함께 ‘settings.py’를 사용합니다. 이 파일을 가져 오는 것도 쉽습니다.

app.config.from_object('application.settings')

그러나 이것은 프로덕션 환경에 적합하지 않습니다.

생산 환경

개인적으로 몇 가지 성능상의 이유로 구성 옵션뿐만 아니라 Apache + mod_wsgi 대신 Nginx + uWSGI를 선택했습니다. 터치 리로드 옵션은 uWSGI 응용 프로그램이 새로 배치 된 플라스크에 응용 프로그램을 다시하게됩니다 파일 / 폴더를 지정할 수 있습니다.

예를 들어, 업데이트 스크립트는 최신 변경 사항을 가져오고 ‘reload_me.txt’파일을 터치합니다. uWSGI ini 스크립트 (이것은 Supervisord에 의해 유지됨)는이 줄을 어딘가에 가지고 있습니다 :

touch-reload = '/opt/virtual_environments/application/reload_me.txt'

이게 도움이 되길 바란다!


답변

uwsgi를 사용하여 실행중인 경우 python auto reload 옵션을 살펴보십시오.

uwsgi --py-autoreload 1

uwsgi-dev-example.ini 예 :

[uwsgi]
socket = 127.0.0.1:5000
master = true
virtualenv = /Users/xxxx/.virtualenvs/sites_env
chdir = /Users/xxx/site_root
module = site_module:register_debug_server()
callable = app
uid = myuser
chmod-socket = 660
log-date = true
workers = 1
py-autoreload = 1

site_root / __ init__.py

def register_debug_server():
    from werkzeug.debug import DebuggedApplication

    app = Flask(__name__)
    app.debug = True
    app = DebuggedApplication(app, evalex=True)
    return app

그런 다음 다음을 실행하십시오.

uwsgi --ini uwsgi-dev-example.ini

참고 :이 예제는 디버거도 활성화합니다.

나는이 경로를 nginx 설정으로 가능한 한 가깝게 생산을 모방했습니다. nginx 뒤의 웹 서버에 내장 된 플라스크 앱을 실행하면 게이트웨이 오류가 발생합니다.


답변

Flask 1.0 이상에 대한 몇 가지 업데이트

핫 리로딩에 대한 기본 접근 방식은 다음과 같습니다.

$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run
  • 사용 FLASK_ENV=development하지 않아야합니다 ( FLASK_DEBUG=1)
  • 안전 점검으로, 당신은 flask run --debugger그것이 켜져 있는지 확인하기 위해 실행할 수 있습니다
  • 플라스크 CLI는 자동으로 같은 것을 읽 FLASK_APP하고 FLASK_ENV당신이있는 경우 .env프로젝트 루트에서 파일파이썬 – dotenv가 설치되어

답변

다른 생각이 있습니다.

먼저:

pip install python-dotenv

python-dotenv프로젝트 환경에 대한 로컬 환경 설정을 읽는 모듈을 설치하십시오 .

둘째:

.flaskenv프로젝트 디렉토리에 파일을 추가 하십시오. 다음 코드를 추가하십시오.

FLASK_ENV=development

끝났다!

Flask 프로젝트에 대한이 구성을 사용하면 실행 flask run하면 터미널에 다음 출력이 표시됩니다.

여기에 이미지 설명을 입력하십시오

파일을 편집 할 때 변경 사항을 저장하십시오. 자동 새로 고침 기능이 제공됩니다.

여기에 이미지 설명을 입력하십시오

자세한 설명 :

물론 export FLASK_ENV=development필요할 때마다 수동으로 맞출 수 있습니다 . 그러나 실제 작업 환경을 처리하기 위해 다른 구성 파일을 사용하는 것이 더 나은 솔루션 인 것 같습니다. 따라서이 방법을 사용하는 것이 좋습니다.


답변

플라스크 애플리케이션은 디버그 모드에서 선택적으로 실행될 수 있습니다. 이 모드에서는 리 로더디버거 라는 개발 서버의 매우 편리한 두 개의 모듈이 기본적으로 사용됩니다. 리 로더가 활성화되면 Flask는 프로젝트의 모든 소스 코드 파일을 감시하고 파일이 수정되면 서버를 자동으로 다시 시작합니다.

기본적으로 디버그 모드는 비활성화되어 있습니다. 이를 활성화하려면 FLASK_DEBUG=1플라스크를 호출하기 전에 환경 변수를 설정하십시오 run.

(venv) $ export FLASK_APP=hello.py for Windows use > set FLASK_APP=hello.py

(venv) $ export FLASK_DEBUG=1 for Windows use > set FLASK_DEBUG=1

(venv) $ flask run

* Serving Flask app "hello"
* Forcing debug mode on
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 273-181-528

소스 파일을 수정하고 저장할 때마다 서버가 자동으로 다시 시작되고 변경 사항을 선택하기 때문에 리 로더를 사용 하여 실행중인 서버를 개발하는 동안 매우 유용합니다.