web-dev-qa-db-ja.com

インタラクティブPython: `%lprun`を動作させることはできませんが、line_profilerは適切にインポートされます

問題

ほとんどの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ノートブックで直接試してみました。どのフォーマットでも運がありませんでした。

33
Mike Williamson

作業を行うには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
18
lmiguelvargasf

作る %lprun作業、次のコマンドを使用してセッションに拡張機能をロードする必要があります。

In [1]: %load_ext line_profiler

このノートブック をチェックして、マジックを使用した例をいくつか確認してください。

また、Spyderを使用している場合は、サードパーティline_profilerプラグイン。これは こちら にあります。

60
Carlos Cordoba