Python分析:使用line_profiler的@profile装饰器会导致错误

时间:2014-11-21 07:55:02

标签: python profiling

我试图使用line_profiler模块分析一些Python代码,但我无法让它工作。我在Windows 7上使用Python 2.7.6。

在以下kernprof -l -v test.py文件上运行test.py时:

@profile
def test():
    a = 1
    b = 1
    return a + b

if __name__ == '__main__':
    print test()

我明白了:

C:\>kernprof -l -v C:\test.py
Wrote profile results to test.py.lprof
Timer unit: 3.01262e-07 s

Traceback (most recent call last):
  File "C:\path_to_kernprof\kernprof-script.py", line 10, in <module>
    sys.exit(main())
  File "C:\path_to_kernprof\kernprof.py", line 221, in main
    execfile(script_file, ns, ns)
  File "C:\test.py", line 1, in <module>
    @profile
NameError: name 'profile' is not defined

显然,如果我注释掉包含line_profiler的@profile装饰器的行,代码将运行良好。我在做什么错了,在这里?

3 个答案:

答案 0 :(得分:2)

可能与python 2和期货有关,请参阅this错误报告,this拉取请求修复此问题。在将新版本上传到pypi之前,您可以相应地修改代码commit

答案 1 :(得分:0)

from memory_profiler import profile

@profile

def my_func():
    a = [1] * (10 ** 6)
    b = [2] * (2 * 10 ** 7)
    del b
    return a

或:

python -m memory_profiler example.py

https://pypi.org/project/memory-profiler/

答案 2 :(得分:-1)

这是networkx包1.11中的错误的结果。像这样降级:

pip uninstall networkx
pip install networkx==1.7