How do I use line_profiler (from Robert Kern)?
line-profiler, profiling, python, python-2.7
Solution
Just follow Dan Riti's example from the first link, but use your code. All you have to do after installing the `line_profiler` module is add a `@profile` decorator right before each function you wish to profile line-by-line and make sure each one is called at least once somewhere else in the code—so for your trivial example code that would be something like this:
`example.py` file:
@profile
def do_stuff(numbers):
print numbers
numbers = 2
do_stuff(numbers)
Having done that, run your script via the `kernprof.py`✶ that was installed in your `C:\Python27\Scripts` directory. Here's the (not very interesting) actual output from doing this in a Windows 7 command-line session:
> python "C:\Python27\Scripts\kernprof.py" -l -v example.py
2
Wrote profile results to example.py.lprof
Timer unit: 3.2079e-07 s
File: example.py
Function: do_stuff at line 2
Total time: 0.00185256 s
Line # Hits Time Per Hit % Time Line Contents
==============================================================
1 @profile
2 def do_stuff(numbers):
3 1 5775 5775.0 100.0 print numbers
You likely need to adapt this last step—the running of your test script with `kernprof.py` instead of directly by the Python interpreter—in order to do the equivalent from within IDLE or PyScripter.
✶Update
It appears that in `line_profiler` v1.0, the `kernprof` utility is distributed as an executable, not a `.py` script file as it was when I wrote the above. This means the following now needs to used to invoke it from the command-line:
> "C:\Python27\Scripts\kernprof.exe" -l -v example.py
Problem
I have tried using the line_profiler module for getting a line-by-line profile over a Python file. This is what I've done so far: 1) Installed line_profiler from pypi by using the .exe file (I am on WinXP and Win7). Just clicked through the installation wizard. 2) Written a small piece of code (similar to what has been asked in another answered question here). ``` from line_profiler import LineProfiler def do_stuff(numbers): print numbers numbers = 2 profile = LineProfiler(do_stuff(numbers)) profile.print_stats() ``` 3) Run the code from IDLE/PyScripter. I got only the time. ``` Timer unit: 4.17188e-10 s ``` How do I get full line-by-line profile over the code I execute? I have never used any advanced Python features like decorators, so it is hard for me to understand how shall I use the guidelines provided by several posts like here and here.