Is there a way to import modules with a string?

moduleName = "Name"

# Is there a possibility to import a module based on that variable? something like
import ."$moduleName" # This is invalid but is there a possibility to do such a thing WITHOUT using include?
1 Like

Checkout Requires.jl.

m = :SomeMod
@eval import .$m
1 Like

Thank you! :smiley:

You’re welcome! There should be an option to mark it as solved. Saves other people some time.

I got an error when trying to import other module in different file by doing
@eval import ..$module
It says ..$ is an invalid operator

Okay I got an issue, if the string is dynamic how would I use the module?
eventName = content |> Symbol
@eval import .$eventName
Now how would I access this module functions if I don’t know it’s name?

This all sounds a bit iffy. Maybe you should try a different approach to your problem. Anyway, something like

m = :SomeMod
@eval import .$m
@eval const Mod = $m

The @eval import ..$m doesn’t seem to parse, so you have to construct the Expr by hand.
So all in all:

julia> module A
       fun(x) = x
julia> module B
       m = :A
       eval(Expr(:import, (Expr(:., :., :., :A))))
       @eval const Mod = $m
       end                                                                                                                                                                                                                                                                                               = 1                                                                                                                                                          
1 Like
julia> foo = Symbol("LinearAlgebra")

julia> @eval using $foo

julia> getfield(getfield(Main, foo), :mul!)
mul! (generic function with 122 methods)

Please do tell us what you’re actually trying to do though, this level of dynamism is usually not required.



I’m indeed curious if there is another way to do that. My problem is similar, I would like to import a list of modules listed in a file (JSON).
Obviously when I read the file I get a list of strings. From this list of strings I would like to import the modules and use the functions inside the modules. I also have just the names of the functions in a string format.

When I trie

eval( Expr(:import, (Expr(:., :., :., Symbol(“nameModule”)

I get “could not import Main.nameModule into Main”

Maybe it isn’t the right way to do it but I couldn’t think of another way to run some functions inside modules when you get the name of the modules/functions from a file (into string format).

I hope my post is clear enough…

Thanks for you ideas.