PyDevを使って、Eclipseの中でPythonコードをいじっているとき、
何気なく、
import psyco
psyco.profile()
などと書いてしまうと、デバッガが「AttributeError: 'module' object has no attribute 'profile'」とメッセージを吐いて実行できません。
よくサンプルとして出されている以下のコードでも同じです。
try:
import psyco
psyco.profile()
except ImportError:
pass
いい加減気になってきたので、原因を調べてみました。
PyDevのソースpydevd.pyに問題の部分が見つかりました。
エラーメッセージが出るまでの流れは、要するに、
・PyDevのデバッガがpsycoを自前でインポートする。
・デバッグの対象となるプログラムには偽物を見せるようになっている
(「sys.modules['psyco'] = pydevd_psyco_stub」とすることで)
・この偽物が、psyco.profile()のダミーを用意していないらしく、エラーになる。
原因が分かったので、安心してpsycoを使うことにします。
try:
import psyco
try:
psyco.profile()
except AttributeError:
pass # the psyco is stub of PyDev
except ImportError:
pass # not installed
何気なく、
import psyco
psyco.profile()
などと書いてしまうと、デバッガが「AttributeError: 'module' object has no attribute 'profile'」とメッセージを吐いて実行できません。
よくサンプルとして出されている以下のコードでも同じです。
try:
import psyco
psyco.profile()
except ImportError:
pass
いい加減気になってきたので、原因を調べてみました。
PyDevのソースpydevd.pyに問題の部分が見つかりました。
エラーメッセージが出るまでの流れは、要するに、
・PyDevのデバッガがpsycoを自前でインポートする。
・デバッグの対象となるプログラムには偽物を見せるようになっている
(「sys.modules['psyco'] = pydevd_psyco_stub」とすることで)
・この偽物が、psyco.profile()のダミーを用意していないらしく、エラーになる。
原因が分かったので、安心してpsycoを使うことにします。
try:
import psyco
try:
psyco.profile()
except AttributeError:
pass # the psyco is stub of PyDev
except ImportError:
pass # not installed