これらのライブラリとツールを使ってヒーローのように Python をデバッグしましょう

これらのライブラリとツールを使ってヒーローのように Python をデバッグしましょう

本物の Python デバッグの専門家になりたいですか?すぐに説明する素晴らしい Python デバッグ ツールとライブラリを使用して、Python コードをデバッグします。

Python は、多くの開発目的で使用される汎用の高レベルのオブジェクト指向プログラミング言語です。さらに、Web アプリケーション開発から Web スクレイピング、さらには機械学習やデータ サイエンスなどのより複雑なアプリケーションまで、さまざまなアプリケーションに効果的な開発ツールです。

開発中には、プログラミング上のバグと呼ばれるエラーが発生しやすくなります。開発者は、コード内の既存のバグと潜在的なバグを検出して削除するためにいくつかの手順を実行します。その結果、プログラム コードのクラッシュを防ぐことができます。このプロセスをデバッグと呼びます。

この記事では、使用できるいくつかの Python デバッガーについて説明します。また、これらのデバッガーが互いにどのように異なるのか、またそれらのデバッガーの実装が効果的になる理由についても説明します。

cProfiler デバッグ ライブラリ

cProfilerは、長時間実行されるコードのプロファイリングを実行する人気のあるライブラリおよび C 拡張機能です。長期的には、実行に時間がかかるプログラム コードのセクションを特定します。コードのさまざまなセクションの実行にかかる正確な時間を特定しますが、コード内のバグを完全に特定したり修正したりするわけではありません。

したがって、他のデバッガを使用する必要があります。

幸いなことに、代わりに、ipdb、Django-debug-toolbar、pyelftools、viztracer、py-spy などの推奨ライブラリを Python コードのデバッグ ツールとして使用できます。

ipdbデバッグツール

IPython 対応の完全な Python デバッガーは、 pdbの機能を含む対話型のサードパーティ デバッガーです。 Ipbdには、対話型シェル IPython サポートも付属しています。このようなサポートには、他のサポート機能の中でも特に、タブ補完、カラー サポート、マジック機能が含まれます。

このデバッガーでは、関連する関数をエクスポートすることで IPython デバッガーにアクセスできるようになります。また、pdb モジュールと同様に、より良いイントロスペクションのための同様のインターフェイスも提供します。

Ipdb を使用したデバッグ

ライブラリは、以下の pip コマンドを使用してインストールする必要があります。

 pip install ipdb

ipdb の使用例は次のようになります。

 import ipdb
alpha_list = ['a', 'b', 'c']
fruit_list = ['orange', 'mango', 'kiwi']

def nested_loop():
    for fruit_list:
        print (fruit)
        ipdb.set_trace()
    for x in alpha_list:
        print(x)
if __name__ == '__main__':
    nested_loop()

以下のコマンドを使用して Python ファイルを実行します。test.py はファイル名です。

 python -m ipdb test.py

ipdb をインポートしてipdb.set_trace()関数を実行すると、プログラムの開始が可能になり、デバッガーが実行全体にわたって実行されます。

ipdb.pm()関数 (事後分析) は、 %debugマジック関数と同様に動作します。

set_trace 引数

コンテキストを引数としてset_traceに渡すと、定義されたコードの数行が表示されます。さらに、 set_traceも引数として受け入れるcondはブール値を受け入れ、 condtrueに設定すると ipdb インターフェースを開始します。

設定ファイルの使用

context 引数は、ホーム フォルダーとプロジェクト フォルダーにある idpdb ファイルまたはsetup.cfgファイルでそれぞれ設定します。 ipdb の機能をさらに確認してみてください。

Django デバッグ ツールバー

Django デバッグ ツールバーは、 Python フレームワークである Django の一般的なデバッグ ツールです。

この構成可能なパネルのセットには、現在のリクエストまたはレスポンスのデバッグ情報が表示されます。ツールバーをクリックすると、パネルの内容に関する詳細が表示されます。

このツールは、Django 開発環境を徹底的に検査します。

こちらのインストール プロセスと構成手順に従ってください。

Pyelftools ライブラリ

pylftoolsライブラリは純粋に Python 上に構築されています。 ELF ファイルと DWARF デバッグ情報を解析および分析します。実行には Python のみが必要です。

Pyelftools には外部ライブラリがないため、使用は簡単です。さらに、環境変数でPYTHONPATHを調整するだけなので、インストールせずに pyelftools を使用するのは非常に簡単です。

以下を使用してインストールします。

 pip install pyelftools 

pylftools を実装するには、それをインポートしてプログラム内で呼び出すだけです。

Icecream 🍦 デバッグ ツール

これは、Python 開発者にとってもう 1 つの効率的なデバッグ ツールです。

Icecreamまたはic()を使用すると、以下に示すように、 print() に比べて多くの利点が得られます。

  • 文字どおり、入力は比較的速くなります。
  • データ構造をかなりうまく出力します。
  • ic()を使用して、式または変数名とその値を出力します。
  • 出力の構文が強調表示されます。
  • オプションで、ファイル名、行番号、親関数などのプログラム コンテキストが含まれます。

このパッケージを使用する前に、以下の pip コマンドを使用してインストールしてください。

 pip install icecream

良い点は、 install()使用してインストールすることで、必ずしもすべてのファイルにic()をインポートしなくても、すべてのファイルで ic() を利用できることです。さらに、 install()組み込みモジュールにic()を追加します。インタプリタがインポートするすべてのファイルはic()を共有します。

最初のルート Python ファイル ( x.py という名前を付けることができます) に、 install()を使用してic()を追加します。

 from icecream import install
install()
from y import mult
mult()
 

y.py ファイルで x.py ファイルをインポートし、ic() を呼び出します。

 def mult():
    z=8
    ic(z)

結果:

 y
ic| z : 8

ic() がより効率的になるのは、次の例のように、渡された変数 (それ自体を含む) を検査し、その引数と引数の値を出力できることです。

 from icecream import ic
def mult(x):
    return x * 4
ic(mult(100))

出力:

 ic| mult(100): 400

さらに、ic() は引数を返すため、既存のコードに挿入できます。以下の例はic| x: 12を返します。 ic| x: 12 、その後ic| y: 48

 from icecream import ic
x = 12
def mult(x):
    return x*4
    y = mult(ic(x))
    ic(y)

py-spy ツールを使用したデバッグ

py-spy を使用すると、デバッグ ツールとして Python プログラムのサンプルをプロファイリングできます。プログラムを再起動したりコードを変更したりせずに、py-spy は Python プログラムの実行を視覚化します。さらに、Rust で書かれているため、オーバーヘッドが低くなります。

さらに、実稼働 Python コードに対して py-spy を使用すると、プロファイリングされた Python プログラムとは異なるプロセスが実行されるため、安全であることを考慮する価値があります。

これまでに紹介した他のすべてのツールと同様に、py-spy ツールはインストール後に使用できます。

 pip install py-spy 

Python プログラムが運用トラフィックを処理しているにもかかわらず、py-spy を使用してこのプログラムのプロファイリングとデバッグができるため、Python プロファイラー ツールとして重要になります。

Viztracer デバッガー

あるいは、デバッグ ツールである viztracer を使用して、Python プログラムの実行をトレースおよび視覚化することもできます。これは、オーバーヘッドの低いロギングを備えたプロファイリング ツールでもあります。

viztracer が効果的なデバッグ ツールとなる理由は何ですか?

  • 使用は非常に簡単で、動作するために外部パッケージに依存しません。
  • Viztracer は、Windows、Linux、または macOS などのすべてのオペレーティング システム プラットフォームで動作します。
  • その強力なフロントエンドは GB レベルのトレースをスムーズにレンダリングします。
  • RegEx を使用して、ソース コード内のコード セクションを変更することなく、 変数や属性発生した例外ガベージ コレクターの操作などの任意の関数と追加情報をログに記録します。
  • viztracer がオーバーヘッドの低いデバッグ ツールである理由は、プログラム内で不要なデータをフィルターで除外する機能です。その後、ログを JSON 形式でダンプする前に、古い情報が保持されます。
  • これを使用して、プログラムの実行時にインスタント イベント変数イベント、および期間イベントなどのカスタム イベントを挿入できます。このように、viztracer がデータをトレースするときに印刷がいつ行われたかを知らせる点を除いて、印刷デバッグのように機能します。

結論

Python プロファイリングとデバッグは、ソフトウェア プロファイリングと同様に、開発における重要なステップであり、注意が必要です。この手順は、コードの全体的なパフォーマンスが最適化されるように、バグのあるコード セクションを除外するのに役立ちます。

上記で説明したデバッグ ツールは、Python 開発者の作業を非常に簡単にする効率的なツールです。

他のデバッグ ツールが cProfiler よりも効率的に機能することを確認すると、真のヒーローのように、これらのデバッガーを使用して Python コードをデバッグし、潜在的なバグを修正して、コードがクラッシュせずに実行されるのを防ぐことができます。

デバッグを楽しんでください!

「これらのライブラリとツールを使ってヒーローのように Python をデバッグしましょう」についてわかりやすく解説!絶対に観るべきベスト2動画

【Pythonプログラミング入門】ライブラリ一括インストール! requirements.txt 〜VTuberと学習〜 【初心者向け】
【Pythonプログラミング入門】静的解析ツール・コードフォーマッターを解説! 〜VTuberと学習〜【初心者向け】