Список загруженных/импортированных пакетов в Julia
Как я могу получить список импортированных/используемых пакетов сеанса Julia?
Pkg.status()
список всех установленных пакетов. Меня интересуют те, которые были импортированы/загружены через using ...
или import ...
Кажется, что whos()
содержит соответствующую информацию (имена и является ли это модулем или нет). Можно ли захватить вывод whos()
в переменной?
Ответы
Ответ 1
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
Используйте 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
Ответ 3
Предложенные ответы не работают с Julia 1.0 и, следовательно, вот версия Julia 1.0:
filter((x) -> typeof(eval(x)) <: Module && x ≠ :Main, names(Main,imported=true))
Ответ 4
Ответ выше уже не работает, как и раньше, в 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
Я использую,
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
Так что это не так приятно с одной строкой, но: он работает на 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