Lanciare Jupyter Notebook da file BAT

Breve post per tenere traccia di una cosetta che ho imparato di recente.

I Jupyter Notebook sono un ottimo strumento per scrivere e utilizzare codice Python per l'elaborazione dati. Milioni di operazioni noiose su fogli excel possono essere comodamente automatizzate ed eseguite senza fatica con Pandas, e il notebook consente di spezzare le operazioni, annotarle con titoli e commenti (con un comodo indice), e osservare i risultati intermedi.

Una volta completato il notebook però resta un problema: tutte le volte che voglio lanciare lo script devo aprire il prompt di Anaconda (ambiente Python per Windows), poi attivare l'ambiente giusto, poi aprire Jupyter Lab nel browser, poi navigare fino al notebook giusto e poi eseguirlo. L'alternativa è convertire il notebook in uno script python, ma resta sempre il problema di anaconda; inoltre perderei i vantaggi di Jupyter se devo tornare indietro a modificare il file in un secondo tempo.

Dopo un paio di ricerche e mezz'ora di esperimenti ho scoperto che tutto quanto detto sopra si può comodamente automatizzare con un batch windows.

rem Avvia Anaconda
call C:\Users\<nome utente>\Anaconda3\Scripts\Activate.bat

rem Attiva l'ambiente corretto
call conda activate prova

rem Naviga nella cartella dello script
cd "c\...\cartellascript"

rem Esegue lo script
ipython "elaborazione.ipynb"

pause

Note:

  • Nella prima riga mettere il percorso corretto dell'installazione Anaconda, potrebbe essere diverso da questo.
  • Nel secondo comando specificare il giusto ambiente Anaconda.

Salviamo questo testo in un file con estensione .bat, e con un doppio click possiamo lanciare il nostro notebook!

Piccolo trucco aggiuntivo: è possibile passare parametri da riga di comando allo script. È sufficiente accodarli alla chiamata ipython:

ipython "elaborazione.ipynb" ciao mille ottimismo

...e andare a leggerli in una cella del nostro notebook:

from sys import argv
script, a, b, c = argv
print("script:" + script)
print("a:" + a)
print("b:" + b)
print("c:" + c)

Occhio che il bruttissimo esempio che ho riportato qui sopra funziona solo se i parametri sono esattamente tre.

Alla prossima!