La plupart des "fonctions magiques" iPython fonctionnent bien pour moi dès le départ: %hist
, %time
, %prun
, etc. Cependant, j'ai remarqué que %lprun
n'a pas pu être trouvé avec iPython car je l'avais installé à l'origine.
J'ai alors découvert que je devrais installer le line_profiler
module. J'ai installé ce module, mais je n'arrive toujours pas à faire fonctionner correctement la fonction magique. Si j'essaie d'appeler %lprun
, iPython ne trouve toujours pas la fonction. Si je l'appelle avec le nom complet (line_profiler.magic_lprun
), la fonction peut être trouvée, mais je ne peux pas la faire fonctionner du tout. Vous trouverez ci-dessous un exemple de ce que j'avais fait (extrait étape par étape du livre "Python for Data Analysis"):
%prun
[Dans:]
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)
Avec cela, j'obtiens une réponse sympa, comme prévu:
[En dehors:]
array([-23.6223074 , -10.08590736, -31.2957222 , ..., -14.17271747,
63.84057725, -50.28469621])
Et je peux faire la fonction magique de profilage %prun
:
[Dans:]
%prun add_and_sum(x, y)
[En dehors:]
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
Mais quand j'essaie %lprun
, Je ne peux rien obtenir:
[Dans:]
%lprun -f add_and_sum add_and_sum(x, y)
[En dehors:]
ERROR: Line magic function `%lprun` not found.
Et si j'essaie d'appeler la fonction avec son nom standard, cela ne fonctionne pas non plus:
[Dans:]
line_profiler.magic_lprun -f add_and_sum.test test.add_and_sum(x, y)
[En dehors:]
line_profiler.magic_lprun -f add_and_sum.test test.add_and_sum(x, y)
^
SyntaxError: invalid syntax
Mais la bibliothèque a été importée correctement, ou du moins c'est ce qu'elle dit:
[Dans:]
line_profiler
[En dehors:]
<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'>
[Dans:]
line_profiler.magic_lprun
[En dehors:]
<function line_profiler.magic_lprun>
Il semble qu'il y ait quelque chose en plus que je suis censé configurer pour que ces nouvelles fonctions magiques que j'ajoute puissent être identifiées comme telles. Je n'ai rien trouvé via une recherche sur le Web.
J'utilise Spyder en tant que IDE (toujours en utilisant iPython comme console), mais je l'ai également essayé directement avec iPython et avec le bloc-notes iPython. Je n'ai pas eu de chance dans n'importe quel format.
Vous avez deux façons de faire fonctionner %lprun
, une solution est temporelle, c'est-à-dire qu'elle dure jusqu'à la fin de votre session ipython
, et que l'autre est permanente.
Temporel: (comme réponse de Carlos Cordoba)
Après avoir démarré ipython
exécutez ce qui suit:
In [1]: %load_ext line_profiler
Permanent:
Ajoutez les lignes suivantes à ~/.ipython/profile_default/ipython_config.py
:
c.TerminalIPythonApp.extensions = [
'line_profiler',
]
Si vous n'avez pas le fichier ~/.ipython/profile_default/ipython_config.py
, vous pouvez le créer par (voir this pour plus d'informations):
ipython profile create
Faire %lprun
travail, vous devez charger l'extension dans votre session, en utilisant cette commande:
In [1]: %load_ext line_profiler
Consultez ce carnet pour voir quelques exemples qui utilisent la magie.
En outre, si vous travaillez avec Spyder, il existe également un tiers line_profiler
plugin, que vous pouvez trouver ici .