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