46 votes

Tracer les importations Python

Ma bibliothèque Python vient de changer le nom de son module principal de foo.bar à foobar . Pour la rétrocompatibilité, foo.bar existe toujours, mais son importation soulève quelques avertissements. Maintenant, il semble qu'un exemple de programme importe toujours depuis l'ancien module, mais pas directement.

J'aimerais trouver la déclaration import Existe-t-il un outil qui me permette de suivre les importations et de trouver le coupable sans parcourir tout le code ?

73voto

Torsten Marek Points 27554

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, il suffit de grep pour votre ancien module.

8voto

HYRY Points 26340

modifiez 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'appels complète.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X