Please ignore secret bonuses. Secret tests do NOT award bonus. Max hw grade is 30+2 bonus efficiency

Do you need help?

Notice Board

Per partecipare al corso di Fondamenti di programmazione 2023-24 loggatevi e attivatelo nella vostra pagina dei corsi preferiti. A quel punto il corso appare nel menù personale cliccando sul proprio avatar. Per i materiali degli anni precedenti seguite lo stesso metodo.

To join the Programming/Lab 2023-24 course, log-on and select it on the my courses page. It will appear on the personal menu of your avatar. For earlier years use the same method.

[AVVISO] Software da installare (Anaconda + librerie) e comandi utili

andrea.sterbini (207920 points)
750 1267 2373
in Avvisi by (208k points)
edited by

Distribuzione di Python usata nel corso: Anaconda

Per svolgere le esercitazioni, gli homework e gli esami usiamo la distribuzione di Python che potete scaricare da www.anaconda.com/download e che contiene:

  • Python 3.7
  • un sacco di librerie standard e/o utili
  • l'ambiente di sviluppo Spyder

NOTA: nella installazione di Anaconda scegliete l'opzione "Only for me"

NOTA: nel corso usiamo Spyder perchè è l'ambiente di sviluppo che userete durante l'esame (ma a casa potete usare PyCharm o altri a piacimento)

Librerie necessarie/utili per il corso

Una volta installato Anaconda potete/dovete installare queste librerie aggiuntive

Libreria A che serve Istallazione in Anaconda Prompt Istallazione in Python3
(solo x chi non usa Anaconda)
Come si usa
ddt Eseguire test con dati presi da file conda install -c conda-forge ddt pip install ddt Viene importata dai test
pytest-timeout Applicare un timeout a ciascun test conda install pytest-timeout pip install pytest-timeout aggiunge il parametro --timeout=<secondi> al comando pytest
stopit applicare il timeout solo all'esecuzione conda install -c conda-forge stopit pip install stopit viene importata dai test
pytest-profiling Esaminare i tempi di esecuzione delle diverse parti del programma conda install -c conda-forge pytest-profiling pip install pytest-profiling aggiunge il parametro --profile al comando pytest
Spyder Ambiente di sviluppo (editor+debugger) conda install spyder pip install spyder
spyder-unittest Lanciare i test da dentro Spyder conda install -c conda-forge spyder-unittest pip install 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 pip install spyder-line-profiler aggiunge in Spyder una voce di menu per lanciare il programma e profilarne i tempi di esecuzione
radon Calcolare l'intricatezza del codice
(complessità ciclomatica massima)
conda install -c conda-forge radon pip install 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 in Anaconda usate il comando (da lanciare dentro la finestra che si apre con "Anaconda Prompt")

  • conda update --all

Questo può essere necessario se Spyder smette di funzionare (dopo aver controllato in Gestione Programmi che il processo Spyder non si sia impallato)

Comandi vari

I test sono i metodi contenuti nel file test.py che hanno il nome che inizia con 'test' e vengono automaticamente individuati ed eseguiti da pytest.

Per eseguire i test senza timeout usate uno dei comandi (il secondo elenca i tempi di esecuzione di ciascun test)

  • pytest test.py
  • pytest test.py -v --durations 0

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 in modo da applicare il timeout ed elencare gli N test più lenti (con T=timeout in secondi)

  • pytest -v test.py --timeout T --durations N

Per calcolare l'intricatezza (complessità ciclomatica) del codice (quello che consideriemo nella classifica è l'intricatezza MASSIMA)

  • 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.7/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)

Python per Android

Scegliete la versione 3 di Python (la versione 2 è ormai obsoleta)

3 Answers

A
AmritV (830 points)
8 8 11
by (830 points)

non riesco a trovare il percorso ".../Anaconda/lib/python3.7/site-packages/pytest_profiling.py"  per modificare il file.

Qualcuno può darmi qualche consiglio su come trovarlo?

ps: sto cercando di ottenere i tempi di esecuzione di ogni metodo o funzione di un programma.

edo.13 (930 points)
2 2 8
by (930 points)
C:\Users\NomeUtente\Anaconda3\Lib\site-packages\pytest_profiling.py --> per Windows 10
A
AmritV (830 points)
8 8 11
by (830 points)
Grazie;trovata!!
DGreat (1250 points)
10 14 28
by (1.3k points)

Vorrei far notare inoltre che è possibile installare tutti i pacchetti richiesti e consigliati insieme lanciando direttamente questi due comandi dal terminale:

conda install -c conda-forge ddt stopit pytest-profiling spyder-unittest spyder-line-profiler radon

conda install pytest-timeout spyder

In questo modo si risparmierà tanto tempo anziché copiare e incollare (o digitare) i comandi uno ad uno e aspettare in eterno!

a
a.pietroluongo (11250 points)
20 39 131
by (11.3k points)
aggiornando spyder alla versione 4, qualcuno ha riscontrato problemi di compatibilità con le librerie?
E
Edward (25950 points)
3 4 172
by (26.0k points)
A me non funziona più spyder-unittest
a
a.pietroluongo (11250 points)
20 39 131
by (11.3k points)
Ho aggiornato anche io..idem
 

Hai installato Kite?
E
Edward (25950 points)
3 4 172
by (26.0k points)
No, non ho installato Kite.