私のPythonライブラリは、メインモジュール名をfoo.bar
からfoobar
に変更しました。下位互換性のために、foo.bar
はまだ存在しますが、インポートするといくつか発生します。現在、いくつかのサンプルプログラムはまだ古いモジュールからインポートしていますが、直接ではないようです。
誤ったimport
ステートメントを見つけたいのですが。すべてのコードを調べずにインポートを追跡して原因を特定できるツールはありますか?
pythonインタープリターを-v
で開始します:
$ python -v -m /usr/lib/python2.6/timeit.py
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# /usr/lib/python2.6/site.pyc matches /usr/lib/python2.6/site.py
import site # precompiled from /usr/lib/python2.6/site.pyc
# /usr/lib/python2.6/os.pyc matches /usr/lib/python2.6/os.py
import os # precompiled from /usr/lib/python2.6/os.pyc
import errno # builtin
import posix # builtin
# /usr/lib/python2.6/posixpath.pyc matches /usr/lib/python2.6/posixpath.py
import posixpath # precompiled from /usr/lib/python2.6/posixpath.pyc
# /usr/lib/python2.6/stat.pyc matches /usr/lib/python2.6/stat.py
import stat # precompiled from /usr/lib/python2.6/stat.pyc
# /usr/lib/python2.6/genericpath.pyc matches /usr/lib/python2.6/genericpath.py
import genericpath # precompiled from /usr/lib/python2.6/genericpath.pyc
# /usr/lib/python2.6/warnings.pyc matches /usr/lib/python2.6/warnings.py
import warnings # precompiled from /usr/lib/python2.6/warnings.pyc
# /usr/lib/python2.6/linecache.pyc matches /usr/lib/python2.6/linecache.py
import linecache # precompiled from /usr/lib/python2.6/linecache.pyc
# /usr/lib/python2.6/types.pyc matches /usr/lib/python2.6/types.py
import types # precompiled from /usr/lib/python2.6/types.pyc
# /usr/lib/python2.6/UserDict.pyc matches /usr/lib/python2.6/UserDict.py
...
次に、古いモジュールをgrepします。
foo.barモジュールを編集し、次のコードを追加します。
import pdb
pdb.set_trace()
foo.barがインポートされると、プログラムはpdbモードのpdb.set_trace()で停止し、コードをデバッグできます。たとえば、「w」コマンドを使用して、完全な呼び出しスタックを出力できます。