【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【大阪 / 横浜 / 徳島】インフラ / サーバーサイドエンジニア募集中!

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【導入実績 500社以上】AWS 構築・運用保守・監視サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【CentOS 後継】AlmaLinux OS サーバー構築・移行サービス

【WordPress 専用】クラウドサーバー『ウェブスピード』

【WordPress 専用】クラウドサーバー『ウェブスピード』

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【格安】Webサイト セキュリティ自動診断「クイックスキャナー」

【予約システム開発】EDISONE カスタマイズ開発サービス

【予約システム開発】EDISONE カスタマイズ開発サービス

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【100URLの登録が0円】Webサイト監視サービス『Appmill』

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【200ヶ国以上に対応】グローバル eSIM「ビヨンドSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【中国への旅行・出張・駐在なら】中国SIMサービス「チョコSIM」

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【グローバル専用サービス】北米・中国でも、ビヨンドのMSP

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

【YouTube】ビヨンド公式チャンネル「びよまるチャンネル」

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
643
X facebook はてなブックマーク pocket
【ウェビナー】マルチクラウド入門 ~あなたのビジネスに最適なクラウドとは?主要8クラウド最新情報をお届け!~

【ウェビナー】マルチクラウド入門 ~あなたのビジネスに最適なクラウドとは?主要8クラウド最新情報をお届け!~

【ウェビナー】運用体制から具体的な手順まで!クラウドサーバー運用保守の全貌を大公開

【ウェビナー】運用体制から具体的な手順まで!クラウドサーバー運用保守の全貌を大公開

この記事をかいた人

About the author

かわ けん

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