Requires.jl icon indicating copy to clipboard operation
Requires.jl copied to clipboard

Sub-module loading package triggers top-level module at __init__() time

Open mossr opened this issue 5 years ago • 0 comments

Say I have a module TopLevel that I want to @require a package (e.g., ProgressMeter)

module TopLevel

using Requires
__init__() = @require ProgressMeter="92933f4c-e287-5a05-a399-4b506db050ca" println("ProgressMeter loaded!")

using Main.SubModule # this uses ProgressMeter internally

end

and I have a sub-module that itself uses ProgressMeter:

module SubModule
    using ProgressMeter # used internal to "SubModule"
    # ...
end

The TopLevel module will always think ProgressMeter is loaded because of a sub-module that uses it internally. This means for the TopLevel package, I cannot @require any packages that are used by dependencies (some of which may be unknown to the developer of TopLevel, causing head-scratching behavior 😄)

Is there a way to ensure that the scope of the @required package is limited to modules "outside" the top-level module?

mossr avatar Aug 17 '20 21:08 mossr