web-dev-qa-db-ja.com

コードの変更時にpython Flaskアプリを自動再読み込み

Pythonを使用して適切なWebアプリを開発する方法を調査しています。いくつかの高次構造を邪魔したくないので、私の選択は軽量 Flaskフレームワーク でした。これが正しい選択であったかどうかは時間が経てばわかります。

したがって、mod_wsgiを使用してApacheサーバーをセットアップし、テストサイトは正常に動作しています。ただし、pyファイルまたはテンプレートファイルに変更が加えられたときにサイトを自動的にリロードすることにより、開発ルーチンを高速化したいと思います。サイトの.wsgiファイルを変更するとリロードが発生することがわかります(Apache構成ファイルにWSGIScriptReloading Onがなくても)が、手動で変更する必要があります(つまり、余分な改行を挿入して保存します)。アプリのpyファイルを編集するときにリロードを引き起こす方法はありますか?または、.wsgiファイルを更新するIDEを使用する必要がありますか?

136
Passiday

現在推奨されている方法(Flask> = 0.11)は、flaskコマンドラインユーティリティを使用する方法です。

http://flask.pocoo.org/docs/0.11/server/

例:

$ export FLASK_APP=main.py
$ export FLASK_DEBUG=1
$ python -m flask run

または1つのコマンドで:

$ FLASK_APP=main.py FLASK_DEBUG=1 python -m flask run

前者はvirtualenvでも動作するため、python -m flask runよりもflask runの方が好きです。

デフォルト(5000)とは異なるポートが必要な場合は、--portオプションを追加します。

例:

$ python -m flask run --port 8080

次のオプションを使用できます。

$ python -m flask run --help
138
Eyal Levin

Test/dev環境について話している場合は、デバッグオプションを使用してください。コードの変更が発生すると、flaskアプリを自動リロードします。

app.run(debug=True)

または、シェルから:

$ export FLASK_DEBUG=1
$ flask run

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

176
codegeek

テスト/開発環境で

Werkzeugデバッガーには、既に次のいずれかを実行して有効にできる「自動再読み込み」機能があります。

app.run(debug=True)

または

app.debug = True

必要に応じて、個別の構成ファイルを使用してすべてのセットアップを管理することもできます。たとえば、「settings.py」と「DEBUG = True」オプションを使用します。このファイルのインポートも簡単です。

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

ただし、これは実稼働環境には適していません。

本番環境

個人的には、いくつかのパフォーマンス上の理由と設定オプションのために、Apache + mod_wsgiよりもNginx + uWSGIを選択しました。 touch-reload オプションを使用すると、uWSGIアプリケーションが新しくデプロイされたflaskアプリをリロードするファイル/フォルダーを指定できます。

たとえば、更新スクリプトは最新の変更を取得し、「reload_me.txt」ファイルにタッチします。 uWSGI iniスクリプト(Supervisordが管理していることは明らかです)のどこかに次の行があります。

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

これがお役に立てば幸いです!

38
Ewan

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の背後にあるWebサーバーに組み込まれているflaskアプリを実行するだけで、ゲートウェイエラーが発生します。

20

Flask 1.0のいくつかの更新

ホットリロードの基本的なアプローチは次のとおりです。

$ export FLASK_APP=my_application
$ export FLASK_ENV=development
$ flask run
8
Zach Valenta

PyCharmでこれを実現するには、「環境変数」セクションを次のように設定します。

PYTHONUNBUFFERED = 1; FLASK_DEBUG = 1

Flask '実行/デバッグ構成'

0
blue-sky