pythonのinspect で モジュールが定義されているファイル名 をゲットする!

python の標準ライブラリに inspect という便利なものがあるので使ってみた。

では、やってみます。


デバッガpdb でプログラムを読み込み、調査するモジュールの import 部分まで進めます。

$ /opt/local/lib/python2.5/pdb.py /Library/Python/2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/rlineimpl.py
> /Library/Python/2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/rlineimpl.py(9)<module>()
-> $Id: Magic.py 1096 2006-01-28 20:08:02Z vivainio $"""
(Pdb) n
> /Library/Python/2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/rlineimpl.py(11)<module>()
-> import sys
(Pdb) n
> /Library/Python/2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/rlineimpl.py(13)<module>()
-> try:
(Pdb) n
> /Library/Python/2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/rlineimpl.py(14)<module>()
-> from readline import *
(Pdb) n
> /Library/Python/2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/rlineimpl.py(15)<module>()
-> import readline as _rl
(Pdb) n
> /Library/Python/2.5/site-packages/ipython-0.9.1-py2.5.egg/IPython/rlineimpl.py(16)<module>()
-> have_readline = True


inspect モジュールを読み込んで、 inspect.getfile(オブジェクト名) を叩きます。

(Pdb) import inspect
(Pdb) inspect.getfile(_rl)
'/Library/Python/2.5/site-packages/readline-2.5.1-py2.5-macosx-10.5-i386.egg/readline.so'


ファイル名をゲットできました:->

他にも色々と便利なことができるので、試してみて下さい!
参考:http://www.python.jp/doc/2.4/lib/module-inspect.html