Pythonスクリプトが依存するモジュールを解析する方法(modulefinderモジュール活用ガイド)
modulefinderモジュールとは
Pythonの標準ライブラリに含まれるmodulefinderモジュールは、特定のPythonスクリプトがインポートしているモジュールのセットを特定できる便利なツールです。このモジュールには、コマンドラインから手軽に使えるインターフェースと、Pythonコード内から利用できるプログラマティックなインターフェースの両方が用意されています。
動作を確認するために、以下のようなサンプルスクリプトを用意します。
#modfinder.py import hello try: import trianglebrowser import nomodule,mymodule except ImportError: pass
このスクリプトでは、存在するモジュール(hello、trianglebrowser)と存在しないモジュール(nomodule、mymodule)の両方をインポートしており、見つからないモジュールによるエラーはtry-except文で捕捉される構成になっています。
コマンドラインインターフェースを使った検索
-m オプションで modulefinder を実行すると、スクリプトが依存するモジュールの一覧と、見つからなかったモジュールの一覧を表示できます。
E:\python37>python -m modulefinder modfinder.py
実行結果
Name File ---- ---- m __main__ modfinder.py m hello hello.py m math m trianglebrowser trianglebrowser.py Missing modules: ? mymodule imported from __main__ ? nomodule imported from __main__
出力を見ると、正常に読み込まれたモジュール(__main__、hello、math、trianglebrowser)と、「Missing modules」として報告された未発見のモジュール(mymodule、nomodule)が明確に区別されていることがわかります。
プログラマティックインターフェースを使った検索
modulefinderモジュールのModuleFinderクラスを使用すると、run_script()メソッドとreport()メソッドによって、スクリプトがインポートしているモジュール群をプログラム的に解析できます。
主なメソッドと属性
- report():標準出力へレポートを出力します。スクリプトがインポートしたモジュールとそのパス、さらに欠落している(または欠落していると思われる)モジュールの一覧が表示されます。
- run_script():引数に指定したファイル(Pythonコードを含む必要があります)の内容を解析します。
- modules:モジュール名をキーとしてモジュールオブジェクトに対応付ける辞書です。
- badmodules:読み込みに失敗したモジュールを格納するリストです。
使用例
以下のコードは、ModuleFinderクラスを使ってmodfinder.pyを解析し、読み込まれたモジュールと見つからなかったモジュールを表示する例です。
import modulefinder
modfind=modulefinder.ModuleFinder()
modfind.run_script('modfinder.py')
print ('Modules loaded:')
for k,v in modfind.modules.items():
print (k,v)
print ('not found:')
for i in modfind.badmodules.keys():
print (i)実行結果
Modules loaded:
__main__ Module('__main__', 'modfinder.py')
hello Module('hello', 'E:/python37\\hello.py')
trianglebrowser Module('trianglebrowser', 'E:/python37\\trianglebrowser.py')
math Module('math')
not found:
nomodule
mymoduleまとめ
modulefinderモジュールを活用すれば、配布前にスクリプトの依存関係を確認したり、実行環境で不足しているモジュールを事前に把握したりすることができます。手軽さを求めるならコマンドラインインターフェース、詳細な情報を取得したいならModuleFinderクラスのプログラマティックインターフェースというように、用途に応じて使い分けると効果的です。
-
CygwinにPythonモジュールをインストールする方法【pipの導入手順を解説】
Cygwin環境でPythonモジュールをインストールする手順Cygwin上でPythonモジュールを管理・インストールしたい場合、まずpipを使えるようにしておくのが最も効率的です。ここでは、Cygwinのセットアップ時に必要なパッケージを選択し、easy_install経由でpipを導入して、任意のモジュールをインストールできるようにするまでの流れを解説します。ステップ1:Cygwinセットアップ時にpythonとpython-setuptoolsをインストールCygwinのインストーラー(setup.exe)を実行する際、パッケージ選択画面で「python」および「python-setu
-
Pythonモジュールの仕組みを徹底解説!importの基本と使い方を実例で学ぼう
Pythonでは、関数や変数などの定義(definition)をひとつのファイルにまとめ、それをスクリプトやインタラクティブな対話シェルの中で再利用することができます。このような定義を格納したファイルのことを「モジュール(module)」と呼びます。 モジュールとは何か モジュール内に書かれた定義は、他のモジュールにインポートして利用できますし、メインモジュールに読み込むことも可能です。ここでいうメインモジュールとは、トップレベルで実行されるスクリプトや、電卓モード(対話モード)でアクセスできる変数群のことを指します。 モジュールが見つかる仕組み:検索パス 例えば hello というモジュ