如何獲取Julia會話導入/使用的軟件包列表?Julia加載/導入的軟件包列表
Pkg.status()
列出所有已安裝的軟件包。我感興趣的是那些已導入/通過using ...
或import ...
似乎whos()
包含相關信息的加載(名稱以及它是否是一個模塊或沒有)。 whos()
的輸出可以在變量中捕獲嗎?
如何獲取Julia會話導入/使用的軟件包列表?Julia加載/導入的軟件包列表
Pkg.status()
列出所有已安裝的軟件包。我感興趣的是那些已導入/通過using ...
或import ...
似乎whos()
包含相關信息的加載(名稱以及它是否是一個模塊或沒有)。 whos()
的輸出可以在變量中捕獲嗎?
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)))
另外,您可以到filter
添加&& x ≠ Lazy
到避免包含它。
使用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
好的,這似乎是一個好的開始。是否有可能僅限於包裝?目前,這還包括工作空間中可能與包名衝突的變量(想象一下變量賦值'Distributions = 1',它可能與加載的包相混淆)。 – Julian 2014-08-29 21:45:57
我不認爲它有可能,但有人可能知道我不會 – IainDunning 2014-08-30 01:47:13
出於好奇,爲什麼你想知道如何做到這一點? – IainDunning 2014-08-30 01:48:19
上面的答案在Julia 0.5中不再像以前那樣工作。它在很多情況下,例如:
children(SIUnits) -> SIUnits.ShortUnits
但大多數包(我使用)實際上並沒有定義子模塊。我發現這對Julia命令行版本和一分鐘內優秀的Juno IDE進行調試非常有用:
loadedmodules() = filter(names(Main, false)) do n
isa(eval(n), Module) && n ≠ Main
end
工程就像一個魅力。是否有可能不依靠懶惰呢?因爲目前它正在更改我們想要獲取的已加載模塊的列表。 – Julian 2014-08-31 19:20:26
當然,答案已更新。 – 2014-09-01 00:34:10
看起來不錯!手動刪除'Lazy'在我們的例子中不起作用,因爲如果它沒有被我們加載,我們仍然想要捕獲它。你的第二個解決方案很好地解決了這一切。 – Julian 2014-09-01 04:03:58