有没有办法在julia lang中构建包依赖关系树?
使用有没有办法在julia lang中构建包依赖关系树?,julia,Julia,使用npm列表将显示已安装软件包、版本和关系的树: 尽管Julia软件包管理有所不同(例如,通常不存在软件包的副本),但是否有办法: 知道为什么安装了一个软件包吗 或者构建包依赖关系树 我认为没有简单的功能,但使用这两个功能应该不会太难: julia> Pkg.dependents("Cairo") 10-element Array{AbstractString,1}: "Tk" "Gtk" "Mamba" "Drawing" "GtkUtilities" "Profile
npm列表
将显示已安装软件包、版本和关系的树:
尽管Julia软件包管理有所不同(例如,通常不存在软件包的副本),但是否有办法:
- 知道为什么安装了一个软件包吗
- 或者构建包依赖关系树李>
julia> Pkg.dependents("Cairo")
10-element Array{AbstractString,1}:
"Tk"
"Gtk"
"Mamba"
"Drawing"
"GtkUtilities"
"ProfileView"
"Brim"
"Winston"
"EcologicalNetwork"
"VennEuler"
julia> Pkg.installed()
Dict{ASCIIString,VersionNumber} with 119 entries:
"Libz" => v"0.0.2"
"Gtk" => v"0.9.3"
"Interact" => v"0.3.0"
"ForwardDiff" => v"0.1.4"
"Benchmark" => v"0.1.0"
"AxisAlgorithms" => v"0.1.4"
"Cairo" => v"0.2.31+"
"HttpParser" => v"0.1.1"
"DataFrames" => v"0.6.10"
"Requests" => v"0.3.4"
"QuartzImageIO" => v"0.1.0+"
"Markdown" => v"0.3.0"
"Requires" => v"0.2.2"
"ArgParse" => v"0.3.0"
⋮ => ⋮
下面的简单代码将打印出包的requires by结果:
whorequires(pkgname) = whorequires(pkgname, 0);
function whorequires(pkgname, i)
deps = Pkg.dependents(pkgname);
[print('-') for j=1:i];
println(pkgname);
length(deps) > 0 && [whorequires(dep,i+1) for dep in deps];
end
julia> whorequires("JuliaParser");
JuliaParser
-CodeTools
--Atom
-ASTInterpreter
--Gallium
-Jewel
编辑(涵盖@amrods评论的问题)
谢谢@daycaster,但是为什么这里没有关于
dependents()在较新的Julia版本中似乎不存在。有其他选择吗?我尝试使用您的函数,似乎有一个无限循环:whorequires(“分发”)
不断打印“Mads”和“BIGUQ”作为彼此的依赖项。如果您使用AbstractTrees.jl,您将绘制附加的unicode树线。或多或少是自动绘制的(通过键入您的树数据结构)。但这是一种依赖关系,所以。如果您仍处于更新状态,ascistring
不再位于Base
字符串
就足够了,是吗?
whorequires(pkgname) = whorequires(pkgname, 0, Dict{ASCIIString,Vector{ASCIIString}}());
function whorequires(pkgname, i, m)
[print('-') for j=1:i];
if (haskey(m,pkgname))
println("$pkgname *[duplicated]* is required by ", length(m[pkgname]), " packages");
else
println(pkgname);
m[pkgname] = Pkg.dependents(pkgname);
if (length(m[pkgname]) > 0)
for dep in m[pkgname]
whorequires(dep,i+1,m);
end
end
end
end