注目キーワード

【Python】モジュールのソースコードを確認するツールを作ってみた

モジュールのソースコードを確認するときは「inspect」を使ってソースの中身を確認することが出来ます。

「inspect」を使う際にはソースを書いて、実行しないといけないのですが、いちいち書くのがめんどくさかったので、確認したいモジュールを引数で渡してモジュールのソースコードを確認するツールを作成してみました。

対象レベル

Pythonの環境設定が整っており、Pythonの基本構文が理解出来ること。

詳しくは「【Python入門】〜初級編〜環境構築・基本構文まとめ」にまとめてあります。興味のある方はご覧ください。

サンプルソースを読むうえで理解しておきたいこと

基本的にこの章の内容は読み飛ばしてOKです。サンプルソースでわからないところがあれば参照してみてください。

ツールの説明

詳しくは 「 inspect の使い方について」で紹介していますが対象のモジュールをインポートして「 inspect.getsource(対象モジュール) 」で取得した内容をprintすれば対象モジュールのソースコードを確認できます。

下のサンプルソースで言うと「 configparser 」を動的に変更すれば、対象モジュールのソースコードが確認できます。

作成したプログラムが以下になります。

まず初めに、モジュールのインポートを行います。

実行中のプログラムからPythonを呼び出すために「 subprocess 」をコマンドラインから引数を受け取るために「sys」をインポートします。

import subprocessimport sys

4行目、5行目でコマンドラインから引数を受け取ります。引数で対象モジュールを受け取るように作ってあります。

args = sys.argvmodule = args[1]

7行目〜11行目の処理で「sample_inspect_getsource.py」と同様の処理を「work.py」に書き込みます。

f = open(path, 'w')f.writelines("import inspect\r\n")f.writelines("import " + module + "\r\n")f.writelines("print(inspect.getsource(" + module + "))\r\n")f.close()

ここで、「work.py」を呼び出すコマンド「python work.py」を実行します。

subprocess.call('python %s' % path)

実行結果

まず実行前に「work.py」か存在しないことを確認します。

プログラム実行前

「configparser」を引数にして、「 sample_module_print.py 」を実行します。

スポンサーリンク

sample_module_print.pyを実行

「work.py」も作成されており、意図したソースコードが記述されています。

プログラム実行後
work.pyの中身

おわりに

今回は、さまざまなモジュールを組み合わせて、動的にモジュールの内容を確認する方法について説明しました。

調べている途中に、「PyCharm」で簡単にモジュールの中身を確認する方法を見つけたので機会があったら記事にしようと思います。