Utilizzo di notebook IPython sotto il controllo della versione

| | | | | | |

Qual è una buona strategia per mantenere i notebook IPython sotto il controllo della versione?

Il formato del notebook è abbastanza suscettibile per il controllo della versione: se si vuole controllare la versione del notebook e delle uscite, allora funziona abbastanza bene. Il fastidio arriva quando si vuole solo controllare la versione dell'input, escludendo gli output delle celle (ovvero "prodotti di costruzione") che possono essere grandi blob binari, specialmente per film e trame. In particolare, sto cercando di trovare un buon flusso di lavoro che:

  • mi permetta di scegliere tra includere o escludere l'output,
  • mi impedisca di eseguire il commit accidentale dell'output se non lo faccio lo voglio,
  • mi permette di mantenere l'output nella mia versione locale,
  • mi permette di vedere quando ho modifiche negli input usando il mio sistema di controllo della versione (cioè se controllo solo la versione gli input ma il mio file locale ha output, quindi vorrei essere in grado di vedere se gli input sono cambiati (richiede un commit). L'uso del comando di stato del controllo della versione registrerà sempre una differenza poiché il file locale ha output.)
  • mi consente di aggiornare il mio notebook di lavoro (che contiene l'output) da un notebook pulito aggiornato. (aggiornamento)

Come accennato, se scelgo di includere gli output (cosa auspicabile quando si utilizza nbviewer per esempio), allora va tutto bene. Il problema è quando non voglio controllare la versione dell'output. Esistono alcuni strumenti e script per rimuovere l'output del notebook, ma spesso incontro i seguenti problemi:

  1. Ho accidentalmente eseguito il commit di una versione con l'output, inquinando così il mio repository.
  2. Cancella l'output per utilizzare il controllo della versione, ma in realtà preferirei mantenere l'output nella mia copia locale (a volte ci vuole un po' per riprodursi, ad esempio).
  3. Alcuni degli script che eliminano le modifiche all'output il formato è leggermente paragonato all'opzione di menu Cella/Tutto output/Cancella, creando così un rumore indesiderato nelle differenze. Questo problema viene risolto da alcune delle risposte.
  4. Quando si estraggono le modifiche a una versione pulita del file, devo trovare un modo per incorporare tali modifiche nel mio blocco appunti di lavoro senza dover eseguire nuovamente tutto. (aggiornamento)

Ho considerato diverse opzioni che discuterò di seguito, ma devo ancora trovare una buona soluzione completa. Una soluzione completa potrebbe richiedere alcune modifiche a IPython o fare affidamento su alcuni semplici script esterni. Attualmente utilizzo mercurial, ma vorrei una soluzione che funzioni anche con git: una soluzione ideale sarebbe indipendente dal controllo della versione.

Questo problema è stato discusso molte volte, ma non esiste una soluzione definitiva o chiara da punto di vista dell'utente. La risposta a questa domanda dovrebbe fornire la strategia definitiva. Va bene se richiede una versione recente (anche di sviluppo) di IPython o un'estensione facilmente installabile.

Aggiornamento: ho giocato con il mio notebook modificato versione che facoltativamente salva una versione .clean ad ogni salvataggio utilizzando Suggerimenti di Gregory Crosswhite. Questo soddisfa la maggior parte dei miei vincoli ma lascia irrisolti i seguenti:

  1. Questa non è ancora una soluzione standard (richiede una modifica del sorgente ipython. C'è un modo per ottenere questo comportamento con una semplice estensione ? Necessita di una sorta di hook per il salvataggio.
  2. Un problema che ho con il flusso di lavoro corrente è l'estrazione delle modifiche. Queste arriveranno nel file .clean, quindi sarà necessario essere integrato in qualche modo nella mia versione di lavoro (ovviamente posso sempre rieseguire il notebook, ma questo può essere un problema, soprattutto se alcuni dei risultati dipendono da calcoli lunghi, calcoli paralleli, ecc.) buona idea su come risolverlo. Forse un flusso di lavoro che coinvolge un'estensione come ipycache potrebbe funzionare, ma sembra un po' troppo complicato.

Note

Rimozione (rimozione) dell'output

  • Quando il notebook è in esecuzione, è possibile utilizzare < codice>Cella/Tutte le uscite/ Cancella opzione di menu per rimuovere l'output.
  • Ci sono alcuni script per rimuovere l'output, come lo script nbstripout.py che rimuove l'output, ma non produce lo stesso output dell'utilizzo dell'interfaccia del notebook. Questo è stato infine incluso nel repository ipython/nbconvert, ma è stato chiuso affermando che le modifiche sono ora incluse in ipython/ipython, ma la funzionalità corrispondente sembra non essere stato ancora incluso. (aggiornamento) Detto questo, soluzione di Gregory Crosswhite mostra che è abbastanza facile farlo, anche senza invocare ipython/nbconvert , quindi questo approccio è probabilmente praticabile se può essere correttamente agganciato. (Collegarlo a ogni sistema di controllo della versione, tuttavia, non sembra una buona idea "questo dovrebbe in qualche modo agganciarsi al meccanismo del notebook.)

Newsgroup

Problemi

Richieste di pull

Ci auguriamo che questo articolo ti abbia aiutato a risolvere il problema. Oltre a Utilizzo di notebook IPython sotto il controllo della versione, controlla altri argomenti relativi a exp.

Vuoi eccellere in Python? Consulta la nostra recensione dei migliori corsi online Python 2022. Se sei interessato alla scienza dei dati, controlla anche come imparare a programmare in R.

A proposito, questo materiale è disponibile anche in altre lingue:



Angelo Williams

Prague | 2022-11-27

Mi stavo preparando per il mio colloquio di codifica, grazie per aver chiarito questo punto - Utilizzo di notebook IPython sotto il controllo della versione in Python non è il più semplice. Lo userò nella mia tesi di laurea

Cornwall Ungerschaft

New York | 2022-11-27

sin è tutto un po' confuso 😭 Utilizzo di notebook IPython sotto il controllo della versione non è l'unico problema che ho riscontrato. Lo userò nella mia tesi di laurea

Frank Wu

Munchen | 2022-11-27

Semplice e chiaro. Grazie per la condivisione. Il mio punto debole è sempre stato il Utilizzo di notebook IPython sotto il controllo della versione e altri problemi con il StackOverflow 😁. Controllato ieri, funziona!

Shop

Learn programming in R: courses

$

Best Python online courses for 2022

$

Best laptop for Fortnite

$

Best laptop for Excel

$

Best laptop for Solidworks

$

Best laptop for Roblox

$

Best computer for crypto mining

$

Best laptop for Sims 4

$

Latest questions

NUMPYNUMPY

Common xlabel/ylabel for matplotlib subplots

12 answers

NUMPYNUMPY

How to specify multiple return types using type-hints

12 answers

NUMPYNUMPY

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

12 answers

NUMPYNUMPY

Flake8: Ignore specific warning for entire file

12 answers

NUMPYNUMPY

glob exclude pattern

12 answers

NUMPYNUMPY

How to avoid HTTP error 429 (Too Many Requests) python

12 answers

NUMPYNUMPY

Python CSV error: line contains NULL byte

12 answers

NUMPYNUMPY

csv.Error: iterator should return strings, not bytes

12 answers

News


Wiki

Python | How to copy data from one Excel sheet to another

Common xlabel/ylabel for matplotlib subplots

Check if one list is a subset of another in Python

sin

How to specify multiple return types using type-hints

exp

Printing words vertically in Python

exp

Python Extract words from a given string

Cyclic redundancy check in Python

Finding mean, median, mode in Python without libraries

cos

Python add suffix / add prefix to strings in a list

Why do I get "Pickle - EOFError: Ran out of input" reading an empty file?

Python - Move item to the end of the list

Python - Print list vertically