Python interactif: impossible d'obtenir` %lprun ' pour fonctionner, bien que le profileur de ligne soit importé correctement
Problème
la Plupart des iPython "fonctions magiques" beau travail pour moi juste au large de la chauve-souris: %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.
tentative de résolution
j'ai alors découvert que je doit installer le line_profiler
module. J'ai installé ce module, mais je n'arrive toujours pas à faire fonctionner correctement la fonction magique. Si je tente de l'appeler %lprun
, iPython ne peut toujours pas trouver la fonction. Si je l'appelle avec le nom complet (line_profiler.magic_lprun
), la fonction peut être trouvé, mais je ne peut pas le faire fonctionner. Voici un exemple de ce que j'ai fait (qui est repris pas à pas du livre "Python for Data Analysis"):
Succès À L'Aide De %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 je reçois une belle réponse, comme prévu:
[:]
array([-23.6223074 , -10.08590736, -31.2957222 , ..., -14.17271747,
63.84057725, -50.28469621])
et je peux faire la fonction de magie de profilage %prun
:
[Dans:]
%prun add_and_sum(x, y)
[:]
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}
Échec À L'Aide De %lprun
Mais quand j'essaie %lprun
, je ne peux pas obtenir quoi que ce soit:
[Dans:]
%lprun -f add_and_sum add_and_sum(x, y)
[:]
ERROR: Line magic function `%lprun` not found.
Et si j'essaie d'appeler la fonction avec son nom standard, il ne fonctionne pas:
[Dans:]
line_profiler.magic_lprun -f add_and_sum.test test.add_and_sum(x, y)
[:]
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és correctement, ou au moins c'est ce qu'il dit:
[Dans:]
line_profiler
[:]
<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
[:]
<function line_profiler.magic_lprun>
il semble qu'il y ait quelque chose de 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'exécute Spyder comme un IDE( utilisant toujours iPython comme console), mais je l'ai aussi essayé directement avec iPython et avec IPython notebook. J'ai pas eu de chance dans n'importe quel format.
2 réponses
Vous avez deux façons de faire le travail %lprun
, une seule solution n'est que temporel, c'est à dire, il dure jusqu'à la fin de votre ipython
session, et l'autre est permanent.
Temporelle: (comme Carlos Cordoba réponse)
Après le démarrage ipython
exécuter la commande suivante:
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 pour plus d'infos):
ipython profile create
faire %lprun
travailler, vous devez charger l'extension dans votre session, en utilisant cette commande:
In [1]: %load_ext line_profiler
découvrez ordinateur portable pour voir quelques exemples qui utilisent la magie.
en outre, si vous travaillez avec Spyder, il y a aussi un tiers line_profiler
plugin, que vous pouvez trouver ici.