magic python profiling ipython spyder magic-function

magic - Python interactivo: no se puede hacer que `% lprun` funcione, aunque line_profiler se importa correctamente



jupyter magic (2)

Para hacer que %lprun funcione, necesita cargar la extensión en su sesión, usando este comando:

In [1]: %load_ext line_profiler

Echa un vistazo a este cuaderno para ver algunos ejemplos que utilizan la magia.

Además, si está trabajando con Spyder, también hay un complemento de line_profiler terceros, que puede encontrar here .

Problema

La mayoría de las "funciones mágicas" de iPython funcionan bien para mí de inmediato: %hist , %time , %prun , etc. Sin embargo, noté que no se podía encontrar %lprun con iPython como lo había instalado originalmente.

Intento de resolver

Entonces descubrí que debería instalar el módulo line_profiler . He instalado este módulo, pero todavía no logro que la función mágica funcione correctamente. Si intento llamar a %lprun , iPython aún no puede encontrar la función. Si lo llamo con el nombre completo ( line_profiler.magic_lprun ), se puede encontrar la función, pero no puedo hacer que funcione. A continuación se muestra un ejemplo de lo que hice (que se explica paso a paso del libro "Python para análisis de datos"):

Exito usando %prun

[En:]

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)

Con esto obtengo una buena respuesta, como era de esperar:

[Afuera:]

array([-23.6223074 , -10.08590736, -31.2957222 , ..., -14.17271747, 63.84057725, -50.28469621])

Y puedo hacer la función mágica de perfiles %prun :

[En:]

%prun add_and_sum(x, y)

[Afuera:]

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}

Fallo al utilizar %lprun

Pero cuando intento %lprun , no puedo obtener nada:

[En:]

%lprun -f add_and_sum add_and_sum(x, y)

[Afuera:]

ERROR: Line magic function `%lprun` not found.

Y si trato de llamar a la función con su nombre estándar, tampoco funciona:

[En:]

line_profiler.magic_lprun -f add_and_sum.test test.add_and_sum(x, y)

[Afuera:]

line_profiler.magic_lprun -f add_and_sum.test test.add_and_sum(x, y) ^ SyntaxError: invalid syntax

Pero la biblioteca se ha importado correctamente, o al menos esto es lo que dice:

[En:]

line_profiler

[Afuera:]

<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''>

[En:]

line_profiler.magic_lprun

[Afuera:]

<function line_profiler.magic_lprun>

Parece que hay algo adicional que debo configurar para que estas nuevas funciones mágicas que agregué puedan identificarse como tales. No pude encontrar nada a través de una búsqueda en la web.

Estoy ejecutando Spyder como un IDE (aún uso iPython como la consola), pero también lo he probado directamente con iPython y con el portátil iPython. No he tenido suerte en ningún formato.


Tiene dos formas de hacer que funcione %lprun , una solución es temporal, es decir, dura hasta que finaliza su sesión de ipython y la otra es permanente.

Temporal: (como respuesta de Carlos Córdoba)

Después de iniciar ipython ejecuta lo siguiente:

In [1]: %load_ext line_profiler

Permanente:

Agregue las siguientes líneas a ~/.ipython/profile_default/ipython_config.py :

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

Si no tiene el archivo ~/.ipython/profile_default/ipython_config.py , puede crearlo por (vea this para más información):

ipython profile create