2015-10-12 13 views
6

Mam plik o nazwie ModuleName.jl w katalogu lokalnym. Wierzę, że ten plik zawiera poprawny moduł:Julia 0.4 nie może znaleźć modułów w ścieżce lokalnej na Ubuntu

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

Kiedy próbuje załadować moduł julia -e "using ModuleName" uzyskać:

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 

Wszystko działa prawo z Julią 0.3.11 w katalogu lokalnym, ale nie jest on z Julia 0.4.0. Używam 64-bitowego Ubuntu 14.04. Jak mogę to naprawić?

+0

jaki jest twój aktualny tryb pracy? gdzie jest twój moduł? 'using' niejawnie wywołuje [' require'] (http://docs.julialang.org/en/latest/stdlib/base/?highlight=require#Base.require), "Podczas wyszukiwania plików,' require' first looks w bieżącym katalogu roboczym. " to może być powód. – Gnimuc

+0

@GnimucKey ModuleName.jl znajduje się w mojej pracy reż. A julia 0.3.11 ładuje ją pomyślnie. – hombit

+0

@GnimucKey Czy 'require' jest przestarzałe w julia 0.4.0? [Kod źródłowy 'require'.] (Https://github.com/JuliaLang/julia/blob/release-0.4/base/require.jl) Gdzie mogę znaleźć implementację' using'? – hombit

Odpowiedz

5

obecnie (v0.4.0), using nie szuka w bieżącym katalogu roboczym. ale dobrą wiadomością jest to, że możesz użyć czegoś takiego jak using .ModuleName, aby ładować moduły w CWD, dopóki jest zaimplementowany problem #4600 (przed v0.5.0).

ta nieudokumentowana zmiana z wersji v0.3 na wersję v0.4 wynika z this commit. jeśli chcesz, aby using zachowywał się tak jak w v0.3. możesz zmienić to line na find_in_path(name) i ponownie skompilować julia ze zmodyfikowanego kodu źródłowego.

1

Po wywołaniu using ModuleName, Julia patrzy w ścieżki, które już zdefiniowano w stałej LOAD_PATH.

Aby sprawdzić zawartość LOAD_PATH stałej po prostu nazwać:

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" 

A jaki jest Twój aktualny katalog roboczy?

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

Można include plik związane z bieżącej lokalizacji, jeśli istnieje:

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 

Dostaniesz inny błąd, jeśli chcesz, aby załadować moduł, który nie istnieje w LOAD_PATH

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

Jeśli LocalModule.jl jest plikiem w lokalnym katalogu roboczym, a chcesz go załadować przez using, przesuń bieżącą ścieżkę do LOAD_PATH, push!(LOAD_PATH, pwd()), teraz możliwe jest ładowanie LocalModule, przez using, z katalogu roboczego.

+0

Sprawdziłem LOAD_PATH w Ubuntu (0.4.0) i OS X (0.3.11). Obie nie mają ścieżki lokalnej. Ale 'using' działa w OS X i nie działa w Ubuntu. Czy Julia zmieniła zachowanie między tymi wersjami? – hombit

3

Oprócz innych sugestii, odniosłem sukces, ustawiając zmienną środowiskową dla ścieżki ładowania Julia (JULIA_LOAD_PATH) w celu uwzględnienia katalogu lokalnego. Innymi słowy, z systemem Julia:

JULIA_LOAD_PATH=. julia 
2

Jeśli developign jakiś kod, to działa najlepiej dla mnie: stworzyć main.jl w katalogu głównym folderze pakietu/modułu. zawiera

include("your-source.jl")

i być może również

include("your-tests.jl")

można następnie po prostu otworzyć sesję Julia konsoli, prace nad „państwa-source.jl” i po prostu wysłać tę linię do terminala, kiedy chcesz go wypróbować. Po zakończeniu można dodać pakiet do ścieżki ładowania.

Powiązane problemy