Distribuzione di Python usata nel corso: Anaconda
Scaricabile da www.anaconda.com/download e che contiene:
- Python 3.8 o 3.9 (ma non usate l'operatore := del 3.9 perchè i test vengono eseguiti su 3.8)
- un sacco di librerie standard e/o utili
- l'ambiente di sviluppo Spyder che usiamo a lezione e negli esami (ma a casa potete usare PyCharm o altri a piacimento)
Per maggiori informazioni su come installarlo vedete https://docs.anaconda.com/anaconda/install
NOTA: installando Anaconda per Windows scegliete l'opzione "Only for me"
Librerie necessarie/utili per il corso
Una volta installato Anaconda potete/dovete installare queste librerie aggiuntive
(notice that spyder-line-profiler and spyder-unittest are not yet compatible with Spyder 5. Perhaps it's better to stick to version 4)
Libreria | A che serve | Istallazione in Anaconda Prompt | Come si usa |
---|---|---|---|
ddt | Eseguire test con dati presi da file | conda install -c conda-forge ddt | Viene importata dai test |
pytest-timeout | Applicare un timeout a ciascun test | conda install pytest-timeout | aggiunge il parametro --timeout=<secondi> al comando pytest |
stopit | applicare il timeout solo all'esecuzione | conda install -c conda-forge stopit | viene importata dai test |
pytest-profiling | Esaminare i tempi di esecuzione delle diverse parti del programma | conda install -c conda-forge pytest-profiling | aggiunge il parametro --profile al comando pytest |
Spyder | Ambiente di sviluppo (editor+debugger) | conda install spyder | |
spyder-unittest | Lanciare i test da dentro Spyder | conda install -c conda-forge spyder-unittest | aggiunge un tab in Spyder per lanciare i test (scegliete pytest e la directory) |
spyder-line-profiler | Esaminare i tempi di esecuzione direttamente dentro Spyder | conda install -c conda-forge spyder-line-profiler | aggiunge in Spyder una voce di menu per lanciare il programma e profilarne i tempi di esecuzione (vedi https://q2a.di.uniroma1.it/16914) |
radon | Calcolare l'intricatezza del codice
(complessità ciclomatica massima) |
conda install -c conda-forge radon | radon cc -a -s --show-closures program.py |
Notepad | è da buttare, non lo usate | non mostra i '\n' | NON LO USATE |
Notepad++ | Editor di testo | https://notepad-plus-plus.org | |
Wordpad | OK | ||
Beyond Compare | Utilissimo per confrontare file di testo ed immagini | https://www.scootersoftware.com/download.php |
Per aggiornare tutte le librerie installate usate il comando (da lanciare dentro la finestra che si apre con "Anaconda Prompt")
- conda update --all
Comandi vari
I test sono i metodi contenuti nel file test.py che hanno il nome che inizia con 'test' e vengono automaticamente eseguiti da pytest.
Per eseguire i test senza timeout dovete editare il file test.py e settare la variabile DEBUG=True
- pytest test.py
Per eseguire uno specifico test invece che tutti
- pytest -v text.py -k <parte del nome del test>
Esempio: pytest test.py -k 2_valori -v
Per eseguire i test elencando gli N test più lenti
- pytest -v test.py --durations N
Per calcolare l'intricatezza (complessità ciclomatica massima) del codice
- radon cc -a -s --show-closures program.py
Per calcolare il tempo di esecuzione complessivo del programma facendo la media su 3 run da 5 test
-
python -u -m timeit -v -v -v -v -n 5 -r 3 -s 'from test import Test' 'Test.main()'
Per esaminare nel dettaglio i tempi di esecuzione del vostro programma per vedere quale parte è più lenta (se avete installato pytest-profiling)
- pytest -rA -v --profile test.py
NOTA: nei log dei test che produco per Q2A ho modificato leggermente l'output del plugin pytest-profiling in modo da elencare le 20 funzioni in cui i test hanno speso più tempo.
Per ottenere lo stesso output potete modificare il file .../Anaconda/lib/python3.8/site-packages/pytest_profiling.py in modo che la riga 64 sia
pstats.Stats(self.combined, stream=terminalreporter).strip_dirs().sort_stats('tottime').print_stats(20)
invece che
pstats.Stats(self.combined, stream=terminalreporter).strip_dirs().sort_stats('cumulative').print_stats(20)
Snakeviz
Per esaminare in modo interattivo il tempo speso nelle diverse funzioni potete usare il profiler e snakeviz:
- installate snakeviz (visualizzatore di file .prof): conda install snakeviz
- eseguite il programma col profiler: pytest --profile test_01.py
- visualizzate i tempi di esecuzione con snakeviz: snakeviz prof/combined.prof
- vi si apre il browser con una visualizzazione che vi permette di capire quanto tempo è speso nelle diverse parti
- cercate la funzione da voi implementata (in genere si chiama es1) e cliccate sulla sua riga, la visualizzazione si focalizzerà sulla vostra soluzione
Usare il modulo turtle in windows: vedete https://q2a.di.uniroma1.it/16861
Python per Android
Scegliete la versione 3 di Python (la versione 2 è ormai obsoleta)