Какой простой способ найти все модули python из определенного пакета, который используется в приложении?
Найти, какие модули python импортируются
Ответ 1
sys.modules
- это имена модулей сопоставления словаря для модулей. Вы можете просмотреть его ключи, чтобы увидеть импортированные модули.
Ответ 2
Вы можете использовать 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
интересующие модули из этого большого списка! -)
Ответ 3
Я думаю, что modulefinder - это то, что вы ищете. Вы можете напрямую использовать modulefinder.py
, запуская его как script, как описано там, или вы можете импортировать модуль, а затем создать отчет с помощью класса modulefinder.ModuleFinder
.
Ответ 4
Реальный простой метод - удалить все .pyc файлы из пакета или папки, а затем запустить приложение. После того, как вы немного поиграли, сделайте список каталогов и посмотрите, какие файлы имеют .pyc файлы. Это модули, которые были импортированы приложением.
(Примечание: модуль __main__
, в зависимости от того, который вы вызываете как "главный" script, никогда не компилируется, поэтому вы не должны ожидать, чтобы он видел файл .pyc, если только что-то не импортировало его из приложения Это часто является признаком проблемы, если это происходит.)