python - 交互式 Python : cannot get `%lprun` to work, 尽管 line_profiler 已正确导入

标签 python profiling ipython spyder magic-function

问题

大多数 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 notebook 进行了尝试。我在任何形式上都没有运气。

最佳答案

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

In [1]: %load_ext line_profiler

查看 this notebook看看一些使用魔法的例子。

另外,如果你正在使用 Spyder,还有一个第三方 line_profiler 插件,你可以找到 here .

关于python - 交互式 Python : cannot get `%lprun` to work, 尽管 line_profiler 已正确导入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19942653/

相关文章:

使用spyder进行Python分析: times for constituents do not sum up to a total function's time

python - 在 Django 中分析 View 的最佳方式是什么?

python - 重置 ipython 内核

python - 将 pandas Dataframe 转换为字典时保留行的顺序

python - 在 JSON 中存储 Python 函数

python - 是否有一个 python 函数返回列表中未出现的第一个正整数?

loops - 分析循环中的周期时间抖动

python - 抑制子类文档字符串中的 "Methods inherited by base class"

python - 运行 IPyhon.widgets 时没有名为 'ipywidgets' 的模块错误

Python Pandas : Increase Maximum Number of Rows