如何获取Julia会话的导入/使用包列表?
Pkg.status()
列出所有已安装的软件包。我对通过using ...
或import ...
似乎whos()
包含相关信息(名称以及是否为模块)。可以在变量中捕获whos()
的输出吗?
答案 0 :(得分:6)
使用names
,例如
julia> using JuMP
julia> using Gurobi
julia> names(Main)
13-element Array{Symbol,1}:
:Calculus
:ans
:JuMP
:DualNumbers
:Graphs
:DataStructures
:ReverseDiffSparse
:MathProgSolverInterface
:Base
:MathProgBase
:Core
:Gurobi
:Main
答案 1 :(得分:4)
using Lazy
children(m::Module) =
@>> names(m, true) map(x->m.(x)) filter(x->isa(x, Module) && x ≠ m)
然后 children(Main)
将为您提供当前加载的模块列表。
编辑:我在这里使用了Lazy.jl作为画眉宏(@>>
),但你可以轻松地重写它:
children(m::Module) =
filter(x->isa(x, Module) && x ≠ m, map(x->m.(x), names(m, true)))
或者,您可以将&& x ≠ Lazy
添加到filter
以避免包含它。
答案 2 :(得分:2)
Base.loaded_modules_array()
为您提供Julia加载的任何模块。
Base.loaded_modules::Dict{Base.PkgId,Module}
是所有已加载模块的字典,loaded_modules_array将从其生成输出。
答案 3 :(得分:1)
建议的答案不适用于Julia 1.0,因此这是Julia 1.0版本:
filter((x) -> typeof(eval(x)) <: Module && x ≠ :Main, names(Main,imported=true))
答案 4 :(得分:0)
上面的答案在Julia 0.5中不再像以前那样有效。它适用于许多情况,例如:
children(SIUnits) -> SIUnits.ShortUnits
但是大多数软件包(我使用的)实际上并没有定义子模块。我认为这对于调试很有用,可以在Julia命令行版本和一分钟内出色的Juno IDE中使用:
loadedmodules() = filter(names(Main, false)) do n
isa(eval(n), Module) && n ≠ Main
end
答案 5 :(得分:0)
我用,
using Pkg
function magic()
println("Julia " * string(VERSION))
for (key, version) ∈ sort(collect(Pkg.installed()))
try
isa(eval(Symbol(key)), Module) && println(key * " " * string(version))
end
end
end
答案 6 :(得分:0)
因此,这不是单线的好方法,而是:
它可以在v1.0
上运行,并且允许进行简单的递归搜索以显示 all 加载的模块:
function children(m::Module)
ns = names(m, imported=true, all=true)
ms = []
for n in ns
if n != nameof(m)
try
x = Core.eval(m, n)
x isa Module && push!(ms, x)
catch end
end
end
ms
end
function children_deep(m::Module)
cs = children(m)
for c in cs
cs = union(cs, children(c))
end
cs
end
然后:
julia> children_deep(Main)
43-element Array{Any,1}:
Base
Core
InteractiveUtils
Base.BaseDocs
Base.Broadcast
Base.Cartesian
Base.Checked
Core.Compiler.CoreDocs
⋮
Base.Sys
Base.Threads
Base.Unicode
Base.__toplevel__
Core.Compiler
Core.IR
Core.Intrinsics
Main
答案 7 :(得分:0)
我非常喜欢Przemyslaw's答案,只是想对其进行一点修改,用一个可选参数代替显式:Main
(作为新手,我不允许输入评论)< / p>
loadedModules(m::Module = Main) = filter(x -> eval(x) isa Module && x ≠ Symbol(m), names(m, imported = true))