小编典典

交互式Python:尽管line_profiler正确导入,但无法使%lprun正常工作

python

问题
大多数IPython的“神奇功能”的工作对我罚款马上蝙蝠: %hist%time%prun等。然而,我注意到,%lprun无法IPython中找到,因为我想最初安装它。

尝试解决
然后,我发现我应该安装该line_profiler模块。我已经安装了此模块,但是似乎仍然无法使magic函数正常工作。如果我尝试调用%lpruniPython仍然找不到该函数。如果我用全名(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中对其进行了尝试。我没有任何形式的运气。


阅读 225

收藏
2020-12-20

共1个答案

小编典典

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

In [1]: %load_ext line_profiler

查看此笔记本,查看一些使用魔术的示例。

此外,如果您正在使用Spyder,则还有一个第三方line_profiler插件

2020-12-20