質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

Q&A

解決済

2回答

870閲覧

Flask内関数をインタープリタで確認しながらスクリプティング/デバッグを行いたい

MagMag

総合スコア80

Flask

FlaskはPython用のマイクロフレームワークであり、Werkzeug・Jinja 2・good intentionsをベースにしています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

PyCharm

エディター・開発ツール

0グッド

1クリップ

投稿2021/06/11 06:56

編集2021/06/11 07:05

前提・実現したいこと

Flaskを使って、機械学習による推論結果を返すWebアプリを作りたいと思っています(機械学習モデルは別スクリプトで作成済)

この時、Flaskの各関数内の処理を、インタプリタで実行結果を確認しながらスクリプトを書いたり、デバッグをしたいのですが、どのように実施したらいいでしょうか?IDEはPyCharmを利用していますが、IDE非依存の方法でも助かります。よろしくお願いいたします。

検証したこと

【Python】Flask + PyCharm でいい感じにデバッグする方法を参考に、app.runを実行するファイルに対して、

Python

1application.run(passthrough_errors=True, use_reloader=True)

とすることで、PyCharmのデバッガでブレイクポイントを設定すると、その後インタプリタで操作できるのですが、当該処理に行くまでWebページを操作する必要があったり、定期的に変数がリセットされたり(おそらく、変更を検知してreloadするため)、処理途中で動かなくなることも多々あり、もっと簡便な方法でプログラムを修正できるようにしたいと思っています。

サンプルスクリプト

以下のスクリプトを引用させていただいております。例えば、predict関数内のy_pred内の平均値を計算したい場合、計算結果を見ながら(異常値やnanが発生していないかなど)、スクリプトを書いていきたいと思っています。

スクリプトの引用元のGithub

Python

1from flask import Flask, request, jsonify, abort 2import pandas as pd 3import pickle 4from datetime import datetime 5import sys 6sys.path.append("./model") # 前処理で使った自作モジュール「pipeline」を読み込むためPYTHONPATHに追加 7app = Flask(__name__) 8 9# アプリ起動時に前処理パイプラインと予測モデルを読み込んでおく 10preprocess = pickle.load(open("model/preprocess.pkl", "rb")) 11model = pickle.load(open("model/model.pkl", "rb")) 12 13 14@app.route('/api/predict', methods=["POST"]) 15def predict(): 16 """/api/predict にPOSTリクエストされたら予測値を返す関数""" 17 try: 18 # APIにJSON形式で送信された特徴量 19 X = pd.DataFrame(request.json, index=[0]) 20 # 特徴量を追加 21 X["trade_date"] = datetime.now() 22 # 前処理 23 X = preprocess.transform(X) 24 # 予測 25 y_pred = model.predict(X, num_iteration=model.best_iteration_) 26 response = {"status": "OK", "predicted": y_pred[0]} 27 return jsonify(response), 200 28 except Exception as e: 29 print(e) # デバッグ用 30 abort(400) 31 32 33@app.errorhandler(400) 34def error_handler(error): 35 """abort(400) した時のレスポンス""" 36 response = {"status": "Error", "message": "Invalid Parameters"} 37 return jsonify(response), error.code 38 39 40if __name__ == "__main__": 41 app.run(debug=True) # 開発用サーバーの起動

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

pytestでテストコードを記載し、そこからデバッガで読み込むことで対応できました。

投稿2021/06/17 23:33

MagMag

総合スコア80

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

そちらのURLは、エラーの際に止まってくれるという説明が書かれてますが、やりたいケースはエラーじゃない通常挙動のデバッグですかね?

https://pleiades.io/help/pycharm/run-debug-configuration-flask-server.html
そちらより新しいこちらの記事もありますが、Professional専用の機能との事なので、そもそものPycharmの無料版だと限界があるかもですね。。

投稿2021/06/12 17:08

riyo

総合スコア33

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

MagMag

2021/06/14 00:03

デバッガを使えればブレークポイントを設定できるので、その場でインタープリターで操作すれば、通常のデバッグとしても活用できるという意図です。ただ、それが使いにくいのでこのような質問をしました。有料版に頼らない場合、どういった対応をするのでしょうか?
riyo

2021/06/16 03:39 編集

基本的に、有料版というものは便利になるために存在するのであって、それと同等の事をしようとすると、既存のツールで何か良いものを探してくるかになると思います。見つからないならば、そう言ったツールはないのかもしれません。 私は普段print+exitを同時に行う関数を作ったりして対処してますが、Xcodeなどみたいに、PycharmでFlaskのブラウザからの動かした挙動をブレークポイントで追う事は難しかった記憶があります。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問