pydepsでPythonプロジェクトの依存関係を可視化してみる
こんにちは
筆者と酒は循環参照
システムソリューション部のかわいです。
5月ですね。なんどめだゴールデンウィーク
さて、Pythonで何かしら開発を進めていると「このコードはどのモジュールに依存してるんだっけ?」「プロジェクト全体の構造が把握できない」なんて悩みにぶつかることありませんか?(え、ない?)
そんな悩みを手助けしてくれる便利なツールがpydepsです。
pydepsを使うと、Pythonプロジェクトのモジュール間の依存関係を解析し、図で分かりやすく可視化してくれます。
この記事ではpydepsのインストールや使い方について紹介します。
セットアップと下準備
■検証環境
Ubuntu 24.04.2 LTS Python 3.12.3
図の描写用にGraphvizをインストールします。
$ sudo apt update $ sudo apt install graphviz
任意の場所にプロジェクト用のディレクトリを作成し移動します。
今回はPython標準のvenvを使います。バージョン管理ツールはなんでもいいのでお好みで。
$ mkdir myproject $ cd myproject $ python3 -m venv env $ source env/bin/activate
pydepsをインストール
(env)$ pip3 install pydeps
サンプルコードの作成
myproject/以下に簡単なコードを置きます。
main.pyがutils.pyをインポートして利用する、基本的な依存関係を示すサンプルコードです
■構成
myproject/ ├── main.py └── utils.py
■utils.py
def helper_function(): print("これはヘルパーファンクションです")
■main.py
import utils # utils.pyをインポート def main_process(): print("メインプロセスを実行します") utils.helper_function() if __name__ == "__main__": main_process()
main.pyを細かく分解すると、
1) utils.pyという別のファイルに依存しており(import utils)、
2) その中のhelper_functionを利用して(utils.helper_function())、
3) main_processという関数内で主要な処理を行い、
4) スクリプトとして直接実行された場合に、そのmain_processを開始する(if __name__ == "__main__":)
という構造になっています。
# 実行結果 (env)$ python3 main.py メインプロセスを実行します これはヘルパーファンクションです
pydepsを試してみる
早速main.pyに対して実行してみます。
(env)$ pydeps main.py
▼「main.svg」が出力されました。
pydepsは、"import utils"という行を見て、「mainはutilsに依存している」という情報を図として表示します。
ちなみに全然別プロジェクトの内容ですが、依存関係が複数ある場合はこういった出力になります。
その他オプション
また、オプションを使うとsvg形式以外に出力することができます。
■他拡張子に出力
# -oオプション (env)$ pydeps main.py -o dependency.png
■jsonベースで出力
(env)$ pydeps main.py --show-deps { "main.py": { "bacon": 0, "imports": [ "utils" ], "name": "main.py", "path": null }, "utils": { "bacon": 1, "imported_by": [ "main.py" ], "name": "utils", "path": "/home/hamchan/TEST/myproject/utils.py" } }
上記のように、色んな形式で出力することも可能です。
導入もめちゃくちゃ簡単なので、ぜひ一度試してみてください
完