web-dev-qa-db-ja.com

どのpythonモジュールがインポートされているかを見つける

アプリケーションで使用されている特定のパッケージからすべてのpythonモジュールを見つける簡単な方法は何ですか?

42
John Jiang

sys.modulesは、モジュール名をモジュールにマッピングする辞書です。キーを調べて、インポートされたモジュールを確認できます。

参照: http://docs.python.org/library/sys.html#sys.modules

38
Ned Batchelder

python -vを使用すると、everyインポートされたモジュールに関するメッセージが送信されます。

$ 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することができます!-)

34
Alex Martelli

modulefinder があなたが探しているものだと思います。 modulefinder.pyを直接使用して、そこで説明されているようにスクリプトとして実行するか、 モジュールをインポートしてからレポートを作成するmodulefinder.ModuleFinderクラスを使用することができます。

1
Pablo Antonio

本当に簡単な方法は、パッケージまたはフォルダーからすべての.pycファイルを削除してから、アプリケーションを実行することです。少し遊んだら、ディレクトリリストを作成して、どのファイルに.pycファイルがあるかを確認します。これらは、アプリケーションによってインポートされたモジュールです。

(注:__main__モジュールは、「メイン」スクリプトとして呼び出したものはコンパイルされないため、アプリケーション内からインポートされない限り、.pycファイルが表示されることはありません。それが起こった場合、これはしばしば問題の兆候です。)

0
Peter Hansen