Что такое простой способ найти все модули Python от конкретного пакета, которые используются в приложении?
sys.modules
- это имена модулей сопоставления словарей с модулями. Вы можете просмотреть его ключи, чтобы увидеть импортированные модули.
Смотрите: http://docs.python.org/library/sys.html#sys.modules
Я думаю, что modulefinder - это то, что вы ищете. Вы можете использовать modulefinder.py
непосредственно, запустив его как скрипт, как описано там, или вы можете импортировать модуль и затем создать отчёт , используя класс modulefinder.moduleFinder
.
Вы можете использовать python -v
, который будет выдавать сообщения о каждом импортированном модуле:
$ 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
...и так далее, и так далее. Конечно же, вы можете позже grep
получить интересующие вас модули из этого большого списка!-)
Настоящий простой метод заключается в удалении всех .pyc-файлов из пакета или папки, а затем запуске приложения. После того, как вы немного поиграете, сделайте список каталогов и посмотрите, какие файлы теперь содержат .pyc-файлы. Это модули, которые были импортированы приложением.
(Замечание: модуль __main__
, который вы вызываете как "главный" скрипт, никогда не компилируется, так что вы не должны ожидать, что увидите для него .pyc-файл, если только что-то не импортировало его из приложения. Это часто является признаком проблемы, если она все-таки произойдет)