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"
    }
}

上記のように、色んな形式で出力することも可能です。

導入もめちゃくちゃ簡単なので、ぜひ一度試してみてください

この記事がお役に立てば【 いいね 】のご協力をお願いいたします!
4
読み込み中...
4 票, 平均: 1.00 / 14
1,244
X facebook はてなブックマーク pocket

この記事をかいた人

About the author

かわ けん

システムソリューション部所属
好奇心旺盛ポケ○ン