2012-06-01 16 views
6

私は、インポートに失敗したモジュールを持っているとしましょう(インポート時に例外があります)。Pythonのインポートに失敗したパスを見つけるにはどうしたらいいですか?

例えば、以下の内容でtest.py

print 1/0 

[明らかに、これは私の実際のファイルではありませんが、それは良いプロキシとして立つ] pythonのプロンプトで、

今:

>>> import test 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "test.py", line 1, in <module> 
    print 1/0 
ZeroDivisionError: integer division or modulo by zero 
>>> 

パス/ファイルの場所を探すには、test.pyが最適です。

[Iは、ファイルの各ディレクトリで探しPython's module search pathを反復処理できますが、私は簡単な方法がなければならないと思うだろう...]

答えて

14

impモジュールを使用してください。

>>> import imp 
>>> imp.find_module('test') # A file I created at my current dir 
(<open file 'test.py', mode 'U' at 0x8d84e90>, 'test.py', ('.py', 'U', 1)) 
>>> imp.find_module('sys') # A system module 
(None, 'sys', ('', '', 6)) 
>>> imp.find_module('lxml') # lxml, which I installed with pip 
(None, '/usr/lib/python2.7/dist-packages/lxml', ('', '', 5)) 
>>> imp.find_module('lxml')[1] 
'/usr/lib/python2.7/dist-packages/lxml' 
+0

パーフェクト:これは、パラメータとして、モジュールの名前を受信し、その2番目の項目のモジュールへのパスであるタプルを返す関数、imp.find_module()を有しています。私は単純な答えがなければならないことを知っていた(ちょうどそれを見つけることができなかった)! – Gerrat

+0

どのようなdevilishly簡単なアプローチ。 –

関連する問題