Ma Python vient de changer son nom de module principal de foo.bar
à foobar
. Pour la compatibilité descendante, foo.bar
existe toujours, mais son importation déclenche quelques avertissements. Maintenant, il semble qu'un exemple de programme soit toujours importé de l'ancien module, mais pas directement.
Je voudrais trouver l'instruction import
erronée. Existe-t-il un outil qui me permette de suivre les importations et de trouver le coupable sans parcourir tout le code?
Démarrez l'interpréteur python avec -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
...
Ensuite, grep pour votre ancien module.
éditez le module foo.bar, ajoutez le code suivant:
import pdb
pdb.set_trace()
lorsque foo.bar sera importé, le programme s'arrêtera à pdb.set_trace () en mode pdb, où vous pourrez déboguer votre code. Par exemple, vous pouvez utiliser la commande "w" pour imprimer la pile d'appel complète.