2015-06-11 11 views
12

Jeden z projektów, nad którymi pracuję, ma cztery różne moduły (Foo, Bar, Baz i Plotting) i mam za zadanie połączenie ich w pakiet. Jest to dość proste w Julię, aby nowy pakiet:Czy mogę utworzyć pakiet Julia zawierający wiele modułów, które można niezależnie importować?

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

skopiowane moje moduły do ​​~/.julia/v0.3/MyPackage/src/ i dodaną zawierać oświadczenia do MyPackage.jl. Wygląda to mniej więcej tak:

module MyPackage 

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

end 

Każdy dołączony plik zawiera odpowiedni moduł.

Moim głównym problemem z tym jest Plotting trwa zawsze importować i to nie jest potrzebne bardzo często, gdy używamy resztę MyPackage. Naprawdę chciałbym móc zrobić coś takiego, jak using MyPackage.Foo, aby uzyskać tylko Foo (a szczególnie w celu wykluczenia Plotting i jego wolnego czasu importu). Próbowałem kilka różnych podejść do tego, jak układam rzeczy, w tym o submodułach wyraźnie zdefiniowanych wewnątrz MyPackage.jl zamiast w każdym pliku indywidualnie, ale bez względu na to, co próbuję, zawsze mam opóźnienie ładowania od Plotting.

Czy można zbudować pakiet, aby można było niezależnie od niego ładować moduły? a jeśli tak, to w jaki sposób?

Uwaga: Jestem nowy w stosunku do Julii i wciąż jeszcze nie buduję pakietów. Przepraszam, jeśli któraś z moich semantyki jest zła lub coś jest niejasne.

Odpowiedz

3

Spróbuj 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

Dla wszystkich zainteresowanych w sposób bardziej szczegółowy, '@ lazymod' jest makro w' Requires.jl' że opóźnia import module, dopóki nie zostanie właściwie wykorzystane, jednak zmienia także składnię wywołania modułu. Choć nie jest to najbardziej eleganckie rozwiązanie, z pewnością przydaje się do przyspieszenia importu, aż do momentu, w którym naprawdę będę musiał knuć spisek. Dzięki! – harts12

+2

Wygląda na to, że w najnowszej wersji 'Requ.jl' funkcja' @Lazymod' została usunięta ... – harts12

Powiązane problemy