Dubbi sull'utilzzo di spyder-line-profiler

C
ColellaV (1040 points)
2 3 9
asked Oct 15, 2020 in Programmare in Python by ColellaV (1,040 points)

Per usare le funzionalità di spyder-line-profiler è necessario aggiungere il decoratore @profile alla funzione che vogliamo profilare, però ogni volta che c'è bisogno di passare dal profiling al run vero e proprio (F5), bisogna ritogliere il decoratore perché "NameError: name 'profile' is not defined". Ho trovato vari workaround su internet ma non mi hanno aiutato

774 views

4 Answers

Best answer
andrea.sterbini (172780 points)
513 935 1789
answered Oct 16, 2020 by andrea.sterbini (172,780 points)
selected Oct 18, 2020 by ColellaV

Il line-profiler aggiunge il "decoratore" profile alle funzioni di base. (un decoratore modifica il funzionamento della funzione definita subito dopo).
In particolare @profile si mette subito prima delle funzioni che ci interessano per registrarne le performance.
Quindi il line-profiler funziona solo se mettete @profile subito prima della vostra funzione.
Però se lasciate @profile nel codice i normali test non funzionano.
Un trucco è iniziare il file program01.py con le righe

if 'profile' not in __builtins__:
    print("installing dummy profile")
    def profile(x): return x

In questo modo se NON state usando il line-profiler verrà definita una funzione profile che non fa nulla alla funzione che segue.

Potrete lasciare i decoratori @profile nel codice.

Rametto (4910 points)
3 4 25
answered Oct 15, 2020 by Rametto (4,910 points)
Non conosco bene l'errore ma per eseguire i test prova ad aprire anaconda prompt ed eseguire questo comando "pytest test_01.py -v -rA
-x ", stando nella directory di questi file
C
ColellaV (1040 points)
2 3 9
commented Oct 15, 2020 by ColellaV (1,040 points)

spyder-line-profiler non è collegato ad i test dell'esercizio, serve per misurare quanto tempo impiega ad eseguire ogni linea di codice

dolcetto_gommoso (2790 points)
3 6 18
answered Oct 15, 2020 by dolcetto_gommoso (2,790 points)

dovresti installare il plugin tramite il prompt anaconda con il codice: 

conda install spyder-line-profiler -c spyder-ide
C
ColellaV (1040 points)
2 3 9
commented Oct 15, 2020 by ColellaV (1,040 points)
Lo so bene, la domanda riguarda un errore successivo.
n
nicosemp (630 points)
0 2 6
commented Nov 17, 2020 by nicosemp (630 points)
hai risolto il mio problema grazie, non trovavo proprio come far funzionare il line profiler!

hai idea del perché vada specificato "-c spyder-ide"?
io avevo seguitola guida del prof mettendo "-c conda-forge".

cercando online ho capito che si tratta del "channel"... forse è come se spyder non lo vedesse a meno che non sia installato nel canale "spyder-ide"?
Loriv3 (7970 points)
10 20 84
answered Oct 16, 2020 by Loriv3 (7,970 points)
Ciao scusami per l'orario non so se possa andare bene ma prova ad aggiungere

import line_profiler

profile = line_profiler.LineProfiler()

Anche io ho avuto questo problema e ho risolto così potrebbe funzionare anche a te
C
ColellaV (1040 points)
2 3 9
commented Oct 16, 2020 by ColellaV (1,040 points)
Se aggiungo quel codice non ho più errori ma il Line Profiler non dà più risultati purtroppo