42

问题

大多数 iPython “魔术函数”对我来说都很好: %hist, %time,%prun等。但是,我注意到%lpruniPython 无法找到它,因为我最初安装了它。

尝试解决

然后我发现我应该安装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 notebook 进行了尝试。我没有任何形式的运气。

4

2 回答 2

65

要开始%lprun工作,您需要使用以下命令将扩展加载到会话中:

In [1]: %load_ext line_profiler

看看这个笔记本,看看一些使用魔法的例子。

此外,如果您使用 Spyder,还有一个第三方line_profiler插件,您可以在此处找到。

于 2013-11-13T03:02:10.217 回答
28

您有两种方法来进行工作%lprun,一种是暂时的,即持续到您完成ipython会话,另一种是永久性的。

时间:(作为卡洛斯科尔多瓦的回答)

开始ipython运行后如下:

In [1]: %load_ext line_profiler

永恒的:

将以下行添加到~/.ipython/profile_default/ipython_config.py

c.TerminalIPythonApp.extensions = [
    'line_profiler',
]

如果您没有该文件~/.ipython/profile_default/ipython_config.py,您可以通过以下方式创建它(有关更多信息,请参阅内容):

ipython profile create
于 2017-05-03T16:28:50.230 回答