はじめに
本記事では、Pythonのコマンドラインツールを使用して、
Pythonコードの構文チェック、実行、デバッグ、テスト、品質確認、および環境確認
を行なう方法についてまとめています。
その中でもpython -mで実行するオプションを抜粋しています。
python -mオプションとは
python -m オプションは、**「モジュール(Module)をスクリプトとして実行する」**ためのコマンドです。
通常、Pythonファイルを実行するときは python script.py のようにファイルパスを指定しますが
-m を使うと、ライブラリやインストールしたパッケージを直接起動できます。
これらのコマンドは、Pythonの標準ライブラリに含まれており、
Pythonのインストールとともに利用可能です。
構文チェック
1. python -m py_compile <file>.py
- 目的: 指定したPythonファイルの構文をチェックし、バイトコードにコンパイルする。
- 用途: コードの構文エラーを事前に検出するための基本的なチェック。
-
使用例:
python -m py_compile logger.py config.py -
出力:
__pycache__ディレクトリ内に.pycファイルが生成される。 - エラー: 構文エラーがある場合、エラーメッセージが表示される。
- 注意: ファイルが正常にコンパイルされた場合、特に出力は表示されない。エラーがある場合のみ、エラーメッセージが表示される。
2. python -m compileall .
- 目的: 指定したディレクトリ以下のすべてのPythonファイルを再帰的にコンパイルする。
- 用途: プロジェクト全体の構文チェックとバイトコード生成に使用される。
-
使用例:
python -m compileall . -
出力: 指定ディレクトリ以下のすべてのPythonファイルに対して、
__pycache__ディレクトリ内に.pycファイルが生成される。 - エラー: 構文エラーがあるファイルについては、エラーメッセージが表示される。
- 注意: 大規模なプロジェクトでは、すべてのファイルがコンパイルされるため、エラーがあるファイルを特定するために出力を注意深く確認する必要がある。
実行・デバッグ確認
1. python -m trace --trace <file>.py
- 目的: 指定したPythonファイルの実行をトレースし、実行された行を表示する。
- 用途: コードの実行フローを確認し、どの行が実行されたかを把握するためのデバッグツール。
-
使用例:
python -m trace --trace logger.py - 出力: 実行された各行の前に、ファイル名と行番号が表示される。
- エラー: 実行時エラーが発生した場合、エラーメッセージが表示される。
- 注意: 大量の出力が生成される可能性があるため、特定の関数やモジュールに絞って使用することが推奨される。
2. python -m pdb <file>.py
- 目的: Pythonの組み込みデバッガーであるPDBを使用して、指定したPythonファイルをデバッグする。
- 用途: コードの実行をステップごとに確認し、変数の値を調査するためのデバッグツール。
-
使用例:
python -m pdb logger.py - 出力: デバッグプロンプトが表示され、ユーザーはコマンドを入力してコードの実行を制御できる。
- エラー: デバッグ中にエラーが発生した場合、エラーメッセージが表示される。
-
注意: デバッグセッション中は、
n(次の行へ進む)、s(関数の中に入る)、c(続行)などのコマンドを使用してコードの実行を制御できる。
テスト・品質確認
1. python -m unittest <test_file>.py
-
目的: Pythonの組み込みテストフレームワークであるunittestを使用して、指定したテストファイルを実行する。pytestがインストールされている場合は、
pytest <test_file>.pyを使用することも一般的。 - 用途: 単体テストを実行し、コードの品質と正確性を確認するためのテストツール。
-
使用例:
python -m unittest test_logger.py - 出力: テストの実行結果が表示され、成功したテストと失敗したテストの数が報告される。
- エラー: テストが失敗した場合、失敗したテストの詳細なエラーメッセージが表示される。
-
注意: テストファイルは、
test_*.pyの形式で命名されることが一般的で、テストケースはunittest.TestCaseクラスを継承して定義されることが多い。
2. python -m doctest <file>.py
- 目的: Pythonの組み込みドキュメンテーションテストフレームワークであるdoctestを使用して、指定したPythonファイル内のドキュメンテーション文字列に記述されたテストを実行する。
- 用途: ドキュメンテーション文字列内のコード例が正しく動作することを確認するためのテストツール。
-
使用例:
python -m doctest logger.py - 出力: ドキュメンテーションテストの実行結果が表示され、成功したテストと失敗したテストの数が報告される。
- エラー: テストが失敗した場合、失敗したテストの詳細なエラーメッセージが表示される。
- 注意: ドキュメンテーション文字列内のコード例は、実際のPythonコードとして記述される必要があり、正確な出力を期待する必要がある。ドキュメンテーションテストは、コードの使用例をドキュメント内で直接テストするための便利な方法である。
3. python -m coverage run <test_file>.py と python -m coverage report
- 目的: Pythonのコードカバレッジツールであるcoverageを使用して、指定したテストファイルを実行し、コードのどの部分がテストされているかを確認する。
- 用途: テストの網羅性を評価し、テストされていないコードの部分を特定するための品質確認ツール。
-
使用例:
- テストの実行とカバレッジの収集:
python -m coverage run test_logger.py - カバレッジレポートの表示:
python -m coverage report - HTMLレポートの生成:
python -m coverage html
- テストの実行とカバレッジの収集:
- 出力: カバレッジレポートが表示され、各ファイルのテストカバレッジの割合が報告される。HTMLレポートを生成した場合は、ブラウザで詳細なカバレッジ情報を確認できる。
- エラー: テストが失敗した場合、失敗したテストの詳細なエラーメッセージが表示される。
- 注意: カバレッジレポートは、テストされていないコードの部分を特定するのに役立ち、テストの改善に役立つ。カバレッジが100%であっても、すべてのコードパスがテストされているわけではないことに注意する必要がある。
環境・依存関係確認
1. python -m site
- 目的: Pythonのサイトパッケージの場所や環境変数を確認するためのコマンド。
- 用途: Pythonの環境設定やインストールされているパッケージの場所を確認するためのツール。
-
使用例:
python -m site - 出力: Pythonのサイトパッケージのディレクトリや環境変数の情報が表示される。
- エラー: 特にエラーは発生しないが、環境設定に問題がある場合は、表示される情報を確認して問題を特定する必要がある。
- 注意: このコマンドは、Pythonの環境設定を確認するためのものであり、特定のファイルやコードのチェックには使用されない。環境設定に問題がある場合は、表示される情報をもとに適切な対処を行う必要がある。
情報表示・調査系
1. python -m pydoc <module_name>
- 目的: 指定したモジュールのドキュメンテーションを表示するためのコマンド。
- 用途: モジュールの使用方法や関数の説明を確認するためのツール。
-
使用例:
python -m pydoc logger - 出力: 指定したモジュールのドキュメンテーションが表示される。関数やクラスの説明、使用例などが含まれることが多い。
- エラー: 指定したモジュールが見つからない場合、エラーメッセージが表示される。
- 注意: モジュールが正しくインストールされていることを確認する必要がある。モジュールのドキュメンテーションは、コードの理解や使用方法の確認に役立つが、実際のコードの動作を確認するためには、他のテストやデバッグツールも併用することが推奨される。
2. python -m timeit <code>
- 目的: 指定したコードの実行時間を測定するためのコマンド。
- 用途: コードのパフォーマンスを評価し、最適化の必要性を判断するためのツール。
- 使用例: `python -m timeit "sum(range(1000))
- 出力: 指定したコードの実行時間が表示される。複数回の実行結果が表示されることが多く、平均的な実行時間を確認することができる。
- エラー: コードに構文エラーがある場合、エラーメッセージが表示される。
- 注意: コードの実行時間は、環境やシステムの状態によって変動する可能性があるため、複数回の実行結果を確認して、平均的な実行時間を評価することが推奨される。また、コードのパフォーマンスを評価する際には、他の要因(例えば、メモリ使用量やI/O操作など)も考慮する必要がある。
3. python -m timeit -s "import <module_name>" "<code>"
- 目的: 指定したモジュールをインポートしてから、指定したコードの実行時間を測定するためのコマンド。
- 用途: モジュールの関数やクラスのパフォーマンスを評価するためのツール。
-
使用例:
python -m timeit -s "import logger" "logger.some_function()" - 出力: 指定したコードの実行時間が表示される。複数回の実行結果が表示されることが多く、平均的な実行時間を確認することができる。
- エラー: コードに構文エラーがある場合、エラーメッセージが表示される。また、指定したモジュールが見つからない場合もエラーメッセージが表示される。
- 注意: モジュールが正しくインストールされていることを確認する必要がある。コードの実行時間は、環境やシステムの状態によって変動する可能性があるため、複数回の実行結果を確認して、平均的な実行時間を評価することが推奨される。また、コードのパフォーマンスを評価する際には、他の要因(例えば、メモリ使用量やI/O操作など)も考慮する必要がある。
-
補足:
-sオプションを使用することで、コードの実行前に必要なセットアップコードを指定することができる。これにより、モジュールのインポートや変数の初期化などを行った上で、コードの実行時間を測定することができる。
まとめ
pythonを扱う場合、知っていて損はないと思います。
無理に暗記はせず、「たしか、こういうオプションがあったな。」という感じで
頭の片隅に置いておいて、都度、調べるスタイルが無難ですね。
よく使うものは手が勝手に動きます。