2015-10-12 16 views
6

Ho un file chiamato ModuleName.jl in una directory locale. Credo che questo file contiene un modulo valido:Julia 0.4 non ha trovato moduli nel percorso locale su Ubuntu

#!/usr/bin/env julia 
module ModuleName 
... 
end 

Quando si cerca di caricare il modulo julia -e "using ModuleName" ottengo:

ERROR: ArgumentError: ModuleName not found in path 
in require at ./loading.jl:233 
in process_options at ./client.jl:284 
in _start at ./client.jl:411 

tutte le opere scorretto con julia 0.3.11 nella directory locale, ma non riesce con Julia 0.4.0. Io uso 64bit Ubuntu 14.04. Come posso risolvere questo?

+0

qual è la tua attuale directory di lavoro? dov'è il tuo modulo? "using" richiama implicitamente ['require'] (http://docs.julialang.org/en/latest/stdlib/base/?highlight=require#Base.require)," Quando si cercano i file, 'require' per prima cosa nella directory di lavoro corrente. " quella potrebbe essere la ragione. – Gnimuc

+0

@GnimucKey ModuleName.jl si trova nella mia directory di lavoro. E julia 0.3.11 lo carica con successo. – hombit

+0

@GnimucKey '' richiesto' deprecato in julia 0.4.0? [Codice sorgente di 'require'.] (Https://github.com/JuliaLang/julia/blob/release-0.4/base/require.jl) Dove posso trovare l'implementazione di' using'? – hombit

risposta

5

attualmente (v0.4.0), using non appare nella directory di lavoro corrente. ma la buona notizia è che è possibile utilizzare qualcosa come using .ModuleName per caricare i moduli in CWD purché venga implementato il problema #4600 (precedente alla v0.5.0).

questa modifica non documentata dalla v0.3 alla v0.4 è dovuta a this commit. se vuoi fare in modo che using si comporti come nella v0.3. è possibile modificare questo line in find_in_path(name) e ricompilare julia dal codice sorgente modificato.

1

Quando si chiama using ModuleName, Julia esamina i percorsi già definiti nella costante LOAD_PATH.

Per controllare i contenuti del LOAD_PATH costante è sufficiente chiamare:

julia>LOAD_PATH 
2-element Array{ByteString,1}: 
"C:\\Users\\AliReza\\AppData\\Local\\Julia-0.4.0\\local\\share\\julia\\site\\v0 
.4" 
"C:\\Users\\AliReza\\AppData\\Local\\Julia-0.4.0\\share\\julia\\site\\v0.4" 

E qual è la vostra directory di lavoro corrente?

julia> pwd() 
"C:\\Users\\AliReza\\AppData\\Local\\Julia-0.4.0" 

È possibile include un file relativo alla posizione corrente, se esiste:

julia> include("missedModule.jl") 
ERROR: could not open file C:\Users\AliReza\AppData\Local\Julia-0.4.0\missedModu 
le.jl 
in include at boot.jl:261 
in include_from_node1 at loading.jl:304 

otterrete un altro errore, se si desidera caricare un modulo che non è esiste in LOAD_PATH

julia> using LocalModule 
ERROR: ArgumentError: LocalModule not found in path 
in require at loading.jl:233 

Se è un file nella directory di lavoro locale e si desidera caricarlo per using, spingere il percorso corrente su LOAD_PATH, push!(LOAD_PATH, pwd()), ora è possibile caricare LocalModule, per using, dalla directory di lavoro.

+0

Ho controllato LOAD_PATH in Ubuntu (0.4.0) e OS X (0.3.11). Entrambi non hanno un percorso locale. Ma 'using' funziona in OS X e non in Ubuntu. Julia ha cambiato il comportamento tra queste versioni? – hombit

3

In aggiunta agli altri suggerimenti, ho avuto esito positivo impostando la variabile di ambiente per il percorso di caricamento Julia (JULIA_LOAD_PATH) per includere la directory locale. In altre parole, in esecuzione Julia con:

JULIA_LOAD_PATH=. julia 
2

Se siete developign un codice, questo funziona meglio per me: creare un main.jl alla radice della cartella package/modulo. contiene

include("your-source.jl")

e forse anche

include("your-tests.jl")

si può poi basta aprire una sessione di Julia in console, il lavoro sul "tuo-source.jl", e basta inviare questa linea nel terminale ogni volta che vuoi provarlo. Una volta terminato, è possibile aggiungere il pacchetto sul percorso di caricamento.

Problemi correlati