如何获取 Julia 会话的导入/使用包列表?
Pkg.status()
列出所有已安装的软件包。using ...
我对通过或导入/加载的那些感兴趣import ...
似乎whos()
包含相关信息(名称以及它是否是模块)。whos()
可以在变量中捕获输出吗?
如何获取 Julia 会话的导入/使用包列表?
Pkg.status()
列出所有已安装的软件包。using ...
我对通过或导入/加载的那些感兴趣import ...
似乎whos()
包含相关信息(名称以及它是否是模块)。whos()
可以在变量中捕获输出吗?
使用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
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
以避免包含它。
建议的答案不适用于 Julia 1.0,因此这里是 Julia 1.0 版本:
filter((x) -> typeof(eval(x)) <: Module && x ≠ :Main, names(Main,imported=true))
我非常喜欢Przemyslaw 的回答,只想对其稍作修改,将显式替换为:Main
可选参数(作为新手,我不允许输入评论)
loadedModules(m::Module = Main) = filter(x -> eval(x) isa Module && x ≠ Symbol(m), names(m, imported = true))
所以这不是一个单行的好,但是:它适用于v1.0
,它允许一个简单的递归搜索来显示所有加载的模块:
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
Base.loaded_modules_array()
为您提供 Julia 加载的任何模块。
Base.loaded_modules::Dict{Base.PkgId,Module}
是一个包含所有已加载模块的字典,loaded_modules_array 从中生成其输出。
上面的答案在 Julia 0.5 中不再像以前那样有效。它适用于许多情况,例如:
children(SIUnits) -> SIUnits.ShortUnits
但是大多数包(我使用的)实际上并没有定义 submodules 。我发现这对调试很有用,在 Julia 命令行版本和一分钟的优秀 Juno IDE 中:
loadedmodules() = filter(names(Main, false)) do n
isa(eval(n), Module) && n ≠ Main
end
我用,
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