IPython タグの一覧です(2 件)

IPython の起動時に特定の処理を走らせる際の例外処理

少し前にこのようなエントリーを書きました。
[IPython] PuDB を IPython のマジックコマンドで使う | aoshiman.org

IPython の起動時に特定の処理を走らせる(上記エントリーでは、import pudb.ipython)には、ipython_config.py の c.InteractiveShellApp.exec_lines に処理を書いていくのですが、その処理がimport文の場合、そのPython環境にimportするモジュールがなければ、当然ImportErrorが発生します((注)importがコケるだけでIPythonそのものは正常に起動します)。

PuDBが不要であったり、IPython環境によっては特定の処理を走らせる必要ない場合もあるので、その場合は

# lines of code to run at IPython startup.
c.InteractiveShellApp.exec_lines = [
"try:import pudb.ipython\nexcept ImportError:pass"
]
のようにtry文を含める形でワンライナーライクに記述すれば、importエラーはpassされるのでエラー表示でドキッとすることもなくなります。
なんか無理矢理っぽい回避策ですが、これでうまくいっているので良しとします。


[IPython] PuDB を IPython のマジックコマンドで使う

最近アルゴリズムなんかを理解する為に写経したPythonコードをPuDBにかけることが多いのですが、PuDBを単体で動かすよりも、IPython上で使えたほうがなにかと便利なのでやり方をメモっておきます。試した環境はYosemite、Python3.4.2です。

スクリーンショット 2015-07-09 21.18.23

PuDBに関してはこちらのエントリーが詳しいです(参考にさせて頂きました)

PuDBを動かす場合、pip でインストールしてから、このようにいつもpythonと打つところをpudbとして起動させます。

pudb3 sieve.py 1000
もしくは-mオプションを付けて呼び出すのですが、
python -m pudb sieve.py 1000
IPythonを使っている場合は以下のようにするとマジックコマンドで使えます
In [1]: import pudb.ipython

In [2]: %pu
%pudb   %pushd

In [2]: %pudb sieve.py 1000
但し、これだと毎度毎度呪文のようにインポートしなければならないので、IPythonの起動時にインポートしてしまいます。具体的には以下のようにプロファイルを作成し、コンフィグファイルにインポートコマンドを記述します。
$ipython profile create
$vi .ipython/profile_default/ipython_config.py 
そして、 c.InteractiveShellApp.exec_lines というコメントアウトされた箇所を見つけ、コメントアウトを解除し、"import pudb.ipython"を追記します。
# lines of code to run at IPython startup.
c.InteractiveShellApp.exec_lines = [
    "import pudb.ipython"
]
因みに、virtualenv(wrapper)環境のIPythonでもちゃんとPuDBのマジックコマンドは使えているので、virtualenv(wrapper)環境下でも設定ファイルは見てくれているようです(sys.pathするとpathが通っているのがわかります(一番最後))。
In [1]: import sys; sys.path
Out[1]:
['',
 '/Users/hogepiyo/.virtualenvs/tmp-b5af62af20e6b944/bin',
 '/Users/hogepiyo/.virtualenvs/tmp-b5af62af20e6b944/lib/python34.zip',
 '/Users/hogepiyo/.virtualenvs/tmp-b5af62af20e6b944/lib/python3.4',
 '/Users/hogepiyo/.virtualenvs/tmp-b5af62af20e6b944/lib/python3.4/plat-darwin',
 '/Users/hogepiyo/.virtualenvs/tmp-b5af62af20e6b944/lib/python3.4/lib-dynload',
 '/usr/local/Cellar/python3/3.4.2/Frameworks/Python.framework/Versions/3.4/lib/python3.4',
 '/usr/local/Cellar/python3/3.4.2/Frameworks/Python.framework/Versions/3.4/lib/python3.4/plat-darwin',
 '/Users/hogepiyo/.virtualenvs/tmp-b5af62af20e6b944/lib/python3.4/site-packages',
 '/Users/hogepiyo/.virtualenvs/tmp-b5af62af20e6b944/lib/python3.4/site-packages/IPython/extensions',
 '/Users/hogepiyo/.ipython']

In [2]:
IPython起動時の設定に関してはこちらを参考にさせて頂きました。
Python Tips:IPython の起動時に特定の処理を走らせたい - Life with Python


PAGE TOP