2016-03-11 15 views
7

Ho due diversi quaderni Jupyter, in esecuzione sullo stesso server. Quello che mi piacerebbe fare è accedere ad alcuni (solo alcuni di essi) delle variabili di un notebook attraverso l'altro notebook (devo confrontare se le due diverse versioni dell'algoritmo danno gli stessi risultati, in pratica). C'è un modo per fare questo?Condivisione di variabili tra diversi quaderni jupyter

Grazie

risposta

5

Se solo avete bisogno di qualcosa Quick'n sporco, è possibile utilizzare il modulo pickle di rendere i dati persistenti (salvarlo in un file) e poi lo hanno prelevato dal vostro altro notebook. Ad esempio:

import pickle 

a = ['test value','test value 2','test value 3'] 

# Choose a file name 
file_name = "sharedfile" 

# Open the file for writing 
with open(file_name,'wb') as my_file_obj: 
    pickle.dump(a,my_file_obj) 

# The file you have just saved can be opened in a different session 
# (or iPython notebook) and the contents will be preserved. 

# Now select the (same) file to open (e.g. in another notebook) 
file_name = "sharedfile" 
# Open the file for reading 
file_object = open(file_Name,'r') 
# load the object from the file into var b 
b = pickle.load(file_object) 

print(b) 
>>> ['test value','test value 2','test value 3'] 
3

Tra 2 notebook jupyter, è possibile utilizzare il comando% store.

Nel primo notebook jupyter:

data = 'string or data-table to pass' 
%store data 
del data 

Nella seconda notebook jupyter:

%store -r data 
data 

È possibile trovare maggiori informazioni a here.

1

È possibile utilizzare lo stesso magic commands fare this.The Cell magic: %%cache nel notebook IPython può essere utilizzato per memorizzare i risultati e le uscite di calcoli di lunga durata in un file di salamoia persistente. Utile quando alcuni calcoli in un notebook sono lunghi e si desidera salvare facilmente i risultati in un file.

Per utilizzarlo nel notebook, è necessario installare prima il modulo ipycache in quanto il comando magico Cell non è un comando magico incorporato.

poi caricare il modulo nel notebook:

%load_ext ipycache 

Poi, creare una cella con:

%%cache mycache.pkl var1 var2 
var1 = 1 # you can put any code you want at there, 
var2 = 2 # just make sure this cell is not empty. 

Quando si esegue questa cella la prima volta, il codice viene eseguito, e le variabili var1 e var2 vengono salvati in mycache.pkl nella directory corrente insieme agli output. Gli output display ricchi vengono salvati solo se si utilizza la versione di sviluppo di IPython. Quando si esegue nuovamente questa cella, il codice viene saltato, le variabili vengono caricate dal file e immesse nello spazio dei nomi e le uscite vengono ripristinate nel blocco note.

In alternativa utilizzare $file_name anziché mycache.pkl, dove nome_file è una variabile che contiene il percorso del file utilizzato per la memorizzazione nella cache.

Utilizzare l'opzione --force o -f per forzare l'esecuzione della cella e sovrascrivere il file.

Utilizzare l'opzione --read o -r per impedire l'esecuzione della cella e caricare sempre le variabili dalla cache. Viene sollevata un'eccezione se il file non esiste.

ref: Il repository github della ipycache e example notebook

Problemi correlati