ほとんどのiPythonの「マジック関数」は、すぐに正常に機能します:%hist
、%time
、%prun
など。ただし、最初にインストールしたときに、%lprun
がiPythonで見つからないことに気付きました。
その後、line_profiler
モジュールをインストールする必要があることを発見しました。このモジュールをインストールしましたが、マジック機能を正しく動作させることができないようです。 %lprun
を呼び出そうとしても、iPythonは関数を見つけることができません。フルネーム(line_profiler.magic_lprun
)で呼び出すと、関数は見つかりますが、まったく機能しません。以下は、私がやったことの例です(「Python for Data Analysis」の本から段階的に取られています)。
%prun
を使用した成功[に:]
def add_and_sum(x, y):
added = x + y
summed = added.sum(axis=1)
return summed
x = randn(3000, 3000)
y = randn(3000, 3000)
add_and_sum(x, y)
これで、予想通り、いい答えが得られます。
[でる:]
array([-23.6223074 , -10.08590736, -31.2957222 , ..., -14.17271747,
63.84057725, -50.28469621])
そして、プロファイリングマジック関数%prun
を実行できます。
[に:]
%prun add_and_sum(x, y)
[でる:]
6 function calls in 0.042 seconds
Ordered by: internal time
ncalls tottime percall cumtime percall filename:lineno(function)
1 0.020 0.020 0.029 0.029 <ipython-input-27-19f64f63ba0a>:1(add_and_sum)
1 0.013 0.013 0.042 0.042 <string>:1(<module>)
1 0.009 0.009 0.009 0.009 {method 'reduce' of 'numpy.ufunc' objects}
1 0.000 0.000 0.009 0.009 _methods.py:16(_sum)
1 0.000 0.000 0.009 0.009 {method 'sum' of 'numpy.ndarray' objects}
1 0.000 0.000 0.000 0.000 {method 'disable' of '_lsprof.Profiler' objects}
%lprun
を使用して失敗するしかし、%lprun
を試すと、何も取得できません。
[に:]
%lprun -f add_and_sum add_and_sum(x, y)
[でる:]
ERROR: Line magic function `%lprun` not found.
また、標準名で関数を呼び出そうとしても機能しません。
[に:]
line_profiler.magic_lprun -f add_and_sum.test test.add_and_sum(x, y)
[でる:]
line_profiler.magic_lprun -f add_and_sum.test test.add_and_sum(x, y)
^
SyntaxError: invalid syntax
しかし、ライブラリは適切にインポートされている、または少なくともこれは言うことです:
[に:]
line_profiler
[でる:]
<module 'line_profiler' from '/Users/<edit>/anaconda/lib/python2.7/site-packages/line_profiler-1.0b3-py2.7-macosx-10.5-x86_64.Egg/line_profiler.pyc'>
[に:]
line_profiler.magic_lprun
[でる:]
<function line_profiler.magic_lprun>
私が追加するこれらの新しいマジック関数がそのように識別できるように、構成することになっている余分なものがあるかのようです。ウェブ検索で何も見つかりませんでした。
私はSpyderをIDE(まだiPythonをコンソールとして使用))として実行していますが、iPythonおよびiPythonノートブックで直接試してみました。どのフォーマットでも運がありませんでした。
作業を行うには2つの方法%lprun
があります。1つのソリューションは一時的なものです。つまり、ipython
セッションを終了するまで続き、もう1つは永続的です。
Temporal:(Carlos Cordobaの答えとして)
ipython
を起動した後、次を実行します。
In [1]: %load_ext line_profiler
パーマネント:
~/.ipython/profile_default/ipython_config.py
に次の行を追加します。
c.TerminalIPythonApp.extensions = [
'line_profiler',
]
ファイル~/.ipython/profile_default/ipython_config.py
がない場合は、次の方法で作成できます(詳細については this を参照)。
ipython profile create