2015-06-11 17 views
12

Uno dei progetti a cui sto collaborando ha quattro moduli diversi (Foo, Bar, Baz e Plotting) e mi è stato assegnato il compito di combinarli in un pacchetto. E 'abbastanza semplice in Julia per fare un nuovo pacchetto:Posso creare un pacchetto Julia contenente più moduli che possono essere importati in modo indipendente?

julia> Pkg.generate("MyPackage", "MIT") 

ho copiato i miei moduli in ~/.julia/v0.3/MyPackage/src/ e ha aggiunto comprendono dichiarazioni MyPackage.jl. Assomiglia a questo:

module MyPackage 

include("foo.jl") 
include("bar.jl") 
include("baz.jl") 
include("plotting.jl") 

end 

Ogni file incluso contiene il modulo corrispondente.

Il mio problema principale con questo è Plotting prende sempre di importare e non serve molto spesso quando stiamo usando il resto della MyPackage. Mi piacerebbe davvero essere in grado di fare qualcosa come using MyPackage.Foo per ottenere solo Foo (e in particolare per escludere il Plotting e il suo tempo di importazione lento). Ho provato un paio di approcci diversi per il modo in cui strutturo le cose, includendo i sottomoduli esplicitamente definiti all'interno di MyPackage.jl invece che in ogni singolo file, ma non importa quello che provo, ottengo sempre il ritardo di caricamento da Plotting.

È possibile creare un pacchetto in modo da poter caricare autonomamente i moduli da esso? e se sì, come?

Nota: sono nuovo di Julia e più recente ancora di creare pacchetti. Scusa se qualcuno della mia semantica ha torto o qualcosa non è chiaro.

risposta

3

Prova Requires.jl:

Requires is a Julia package that will magically make loading packages faster, maybe. It supports specifying glue code in packages which will load automatically when a another package is loaded, so that explicit dependencies (and long load times) can be avoided.

+1

Per chiunque sia interessato in modo più dettagliato, '@ lazymod' è una macro in' Requires.jl' che ritarda l'importazione di un modulo fino a quando non viene effettivamente utilizzato, tuttavia, cambia anche la sintassi per chiamare il modulo. Anche se non sembra la soluzione più elegante, è certamente utile per velocizzare le importazioni fino a quando non ho davvero bisogno di tracciare. Grazie! – harts12

+2

Sembra che nella versione recente di 'Requires.jl', la funzione' @ lazymod' sia stata rimossa ... – harts12