Sprawdź, które Moduły Pythona są importowane

Jak łatwo znaleźć wszystkie moduły Pythona z danego pakietu, które są używane w aplikacji?

Author: John Jiang, 2010-01-04

4 answers

sys.modules jest słownikiem mapującym nazwy modułów na moduły. Możesz sprawdzić jego klucze, aby zobaczyć zaimportowane Moduły.

 36
Author: Ned Batchelder,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-04 04:07:10

Możesz użyć python -v, który będzie emitował komunikaty o każdy importowany moduł:

$ echo 'print "hello world"' > helo.py
$ python -v helo.py
# installing zipimport hook
import zipimport # builtin
# installed zipimport hook
# /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site.py
import site # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/site.pyc
# /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/os.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/os.py
import os # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/os.pyc
import posix # builtin
# /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/posixpath.pyc matches /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/posixpath.py
import posixpath # precompiled from /System/Library/Frameworks/Python.framework/Versions/2.5/lib/python2.5/posixpath.pyc

...i tak dalej, i tak dalej. Oczywiście można później grep moduły zainteresowania spośród tej dużej listy!-)

 32
Author: Alex Martelli,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-04 04:09:47

Myślę, że modulefinder jest tym, czego szukasz. Możesz użyć modulefinder.py bezpośrednio, uruchamiając go jako skrypt, jak jest tam opisane, lub możesz zaimportować moduł, a następnie utworzyć raport za pomocą klasy modulefinder.ModuleFinder.

 1
Author: Pablo Antonio,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-04 04:11:53

Naprawdę prostą metodą jest usunięcie wszystkich .pliki pyc z pakietu lub folderu, a następnie uruchom aplikację. Po odtworzeniu trochę, zrobić listę katalogów i zobaczyć, które pliki mają .pliki pyc. Są to moduły, które zostały zaimportowane przez aplikację.

(Uwaga: moduł __main__, który zostanie wywołany jako skrypt "main", nigdy nie zostanie skompilowany, więc nie powinieneś oczekiwać, że zobaczysz .plik pyc dla niego, chyba że coś zaimportowało go z wewnątrz aplikacji. Jest to często oznaka problemu, jeśli tak się stanie.)

 0
Author: Peter Hansen,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-01-04 04:15:02