Also see https://github.com/JuliaLang/julia/pull/6884
On Tue, May 5, 2015 at 12:52 PM Kristoffer Carlsson <[email protected]> wrote: > Thank you for the link. My current structure is now then: > > # MyPackage.jl > module MyPackage > > export foo, AbstractBook > > include("required.jl") > include("library.jl") > end > > # required.jl > abstract AbstractBook > foo(a::AbstractBook) = print(a) > > # library.jl > module Library > > using Requires > > @lazymod BookModule1 "book1.jl" > @lazymod BookModule" "book2.jl" > > end > > > # book1.jl > module BookModule1 > using MyPackage > export Book1 > type Book1 <: AbstractBook > end > > # book2.jl > module BookModule2 > using MyPackage > export Book2 > type Book2 <: AbstractBook > end > > I can then load the Book1Mod using > > julia> MyPackage.Library.bookmodule1() > MyPackage.Library.BookModule1 > > > which is a little bit uglier than what I would like but it works! > > Thanks! > > // Kristoffer > > On Tuesday, May 5, 2015 at 6:12:35 PM UTC+2, Isaiah wrote: > >> Have a look at https://github.com/one-more-minute/Requires.jl >> > >> On Tue, May 5, 2015 at 12:04 PM, Kristoffer Carlsson <[email protected]> >> wrote: >> >>> I have a package where some functionality should always be loaded when >>> writing the normal "using MyPackage" and some functionality needs to be >>> explicitly loaded. The use case for me is that I have a library of >>> different things (let's call them books) and it is likely that only a few >>> books from this library are used and I want to reduce the loading time of >>> the package. >>> >>> To make it concrete let's assume I currently have the following >>> file/module structure: >>> # MyPackage.jl >>> module MyPackage >>> export foo >>> include("required.jl") >>> include("library.jl") >>> end >>> >>> # required.jl >>> abstract AbstractBook >>> foo(a::AbstractBook) = print(a) >>> >>> # library.jl >>> >>> include("book1.jl") >>> include("book2.jl") >>> >>> # book1.jl >>> type Book1 <: AbstractBook >>> >>> # book2.jl (oh boy...) >>> using Gadfly >>> using Winston >>> using Images >>> using PyCall >>> type Book2 <: AbstractBook >>> >>> Now, I want my usage of the package to look something like this: >>> using MyPackage # Loads everything required >>> using MyPackage.Library.Book1 # Only loads book1.jl, book2.jl is not >>> touched, fast loading >>> >>> Foo(Book1()) >>> >>> I guess I have to put my books into their own separate modules, akin: >>> >>> # MyPackage.jl >>> module MyPackage >>> export foo >>> include("required.jl") >>> end >>> >>> # required.jl >>> abstract AbstractBook >>> foo(a::AbstractBook) = print(a) >>> >>> # book1.jl >>> module BookModule1 >>> using MyPackage >>> export Book1 >>> type Book1 <: AbstractBook >>> end >>> >>> # book2.jl >>> module BookModule2 >>> using MyPackage >>> export Book2 >>> type Book2 <: AbstractBook >>> end >>> >>> But now there is no convenient way to load the book modules? >>> >>> Can anyone help me how to properly structure this? A link to a package >>> that does this will likely work just fine. >>> >>> Best regards, >>> Kristoffer Carlsson >>> >> >>
