2014-08-29 2 views
7

Как я могу получить список импортированных/используемых пакетов сеанса Julia?Список загруженных/импортированных пакетов в Julia

Pkg.status() список всех установленных пакетов. Я заинтересован в тех, которые, которые были импортированы/загружены через using ... или import ...

Кажется, что whos() содержит соответствующую информацию (имена и является ли это модуль или нет). Может ли захват вывода whos() в переменной?

ответ

4
using Lazy 
children(m::Module) = 
    @>> names(m, true) map(x->m.(x)) filter(x->isa(x, Module) && x ≠ m) 

children(Main) тогда даст вам список модулей, в настоящее время загружены.


Edit: Я Lazy.jl здесь молочницы макро (@>>), но вы можете переписать его без достаточно легко:

children(m::Module) = 
    filter(x->isa(x, Module) && x ≠ m, map(x->m.(x), names(m, true))) 

В качестве альтернативы можно добавить && x ≠ Lazy к filter в не включайте его.

+0

Работает как шарм. Можно ли обойтись без лжи? Потому что на данный момент он меняет список загружаемых модулей, которые мы хотим получить. – Julian

+0

Несомненно, ответьте на обновления. –

+0

Выглядит хорошо! Удаление «Lazy» вручную не сработало бы в нашем случае, поскольку мы все еще хотим его захватить, если он не был загружен нами. Ваше второе решение удовлетворяет всем этим. – Julian

5

Использовать 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 
+0

Хорошо, это похоже на хорошее начало. Можно ли ограничивать его только пакетами? На данный момент это также включает переменные в рабочей области, которые могут конфликтовать с именем пакета (представьте себе присвоение переменной 'Distributions = 1', которое может быть путано с загруженным пакетом). – Julian

+0

Я не думаю, что это возможно, но кто-то может знать что-то я не – IainDunning

+0

Из любопытства, почему вы хотите знать, как это сделать? – IainDunning

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