2015-06-05 10 views
7

Mi trovo spesso a sviluppare nuovi moduli Julia e allo stesso tempo utilizzare quei moduli per il mio lavoro. Così avrò un notebook IPython (Jupyter), con qualcosa come:Che cos'è un buon flusso di lavoro per lo sviluppo di moduli Julia con IPython/Jupyter?

using DataFrames 
using MyModule 

allora farò qualcosa di simile:

x = myfunction(7, 3) 

ma dovrò modificare tale funzione, e purtroppo a quel punto non posso semplicemente fare

using MyModule 

di nuovo. Non sono davvero sicuro del perché; Ho pensato che chiamare using dichiarasse semplicemente i moduli disponibili per renderli consapevoli dell'ambito globale, e quindi quando un nome è effettivamente necessario, il runtime cerca la definizione tra i moduli attualmente caricati (a partire da Main).

Quindi non dovrebbe using MyModule semplicemente aggiornare le definizioni degli elementi nel modulo già dichiarato? Perché devo interrompere e riavviare completamente il kernel per poter utilizzare le mie funzioni aggiornate? (E 'perché i nomi sono legati solo una volta per le funzioni che vengono dichiarati utilizzando la parola chiave function?)

Ho guardato Julia Workflow Tips, ma non trovo l'intero sistema Tmp, tst.jl molto semplice o elegante ... almeno per un notebook.

Qualche suggerimento?

+1

Sarei curioso di sapere se ti è capitato di trovare una risposta. – ARM

+0

Si potrebbe dare un'occhiata a questa domanda: http://stackoverflow.com/questions/25028873/how-do-i-reload-a-module-in-an-active-julia-session-after-an- modifica Questo considera lo stesso problema, vale a dire il ricaricamento dei moduli. – niczky12

+0

Indipendentemente dal fatto che * si possa * fare questo, non sono sicuro che * dovresti *. Quando ricarichi un modulo, ottieni comunque oggetti che precedono il modulo e non sei mai abbastanza sicuro se ciò che esegui sia realmente indipendente. Il mio flusso di lavoro per lo sviluppo del modulo è quello di eseguire la suite di test. Posso giocherellare con le funzioni in REPL o simili, ma se voglio guardare gli effetti a livello di modulo, eseguo i test. –

risposta

2

Penso che ci sia molta verità in this statement attributed to one of the Juno developers: Il taccuino Jupyter è per lavorare con i dati. Juno IDE è per lavorare con il codice.

Jupyter è ottimo per l'utilizzo di moduli in stile notebook che l'output che si sta ottenendo è riproducibile. Juno e REPL hanno un sovraccarico minore che ti consente di continuare a iniziare nuove sessioni (test più rapidi e risolvere il problema che hai notato), avere più schede aperte per seguire il codice attorno a un modulo complesso e utilizzare il debugger (in v0.5). Affrontano diversi problemi di sviluppo per le diverse fasi di utilizzo. Penso che tu stia spingendo contro la marea se stai usando lo strumento sbagliato per il lavoro sbagliato.