2016-04-15 4 views
5

がインストールされているパッケージ、バージョンと関係のツリーが表示されます:julia-langにパッケージ依存関係ツリーを構築する方法はありますか? <code>npm list</code>を使用して

enter image description here

ジュリアのパッケージ管理(例えば、通常パッケージの重複コピーが存在しない)異なっているが、これにどのような方法がありますが。

  • 1つのパッケージがインストールされている理由を知っていますか?
  • 、またはパッケージ依存関係ツリーを構築します。

答えて

4

私は簡単な関数はないと思うが、この2つの機能を行うにはあまりにも難しいことではありません。

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" 
    ⋮     => ⋮ 
+0

ありがとう@daycaster、なぜここに 'dependents()'について何もないのですか?[http://docs.julialang.org/en/release-0.4/stdlib/pkg/]? –

+0

@RezaAfzalanはい、それは文書化されていないようです。そしてそれは一度、「whorequires()」という面白い不適切な名前を持っていましたか? :) – daycaster

2

簡単なコード怒鳴るが必要です-で結果をプリントアウトしますパッケージ:(@amrodsによるコメント問題をカバーするために)

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 

EDIT

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 
+0

あなたの関数を使ってみましたが、無限ループがあるようです: 'whorequires(" Distribution ")'は、 "Mads"と "BIGUQ"を互いに依存関係にして印刷し続けます。 – amrods

+0

AbstractTrees.jlを使用した場合、attactiveのユニコードツリー線が描画されます。多かれ少なかれ自動的に(あなたのtreeishデータ構造をducktypingすることによって)。しかし、それは依存関係です。 –

関連する問題