まだまだ続くよどこまでも。勝手に続く勝手に回答シリーズ。今回もJuliaLang Discourseから How to check what other packages an installed package uses?という質問です。
実は私が過去に書いた日記にujimushiの日記: julia言語でインストールしているパッケージの依存関係をなんちゃってツリー表示する というのがあってそれを使えばいいかも,とか思います。
ソースを再掲。
using Pkg """ print_pkg_dependencies(pkgname, limit=2) print a tree of `pkgname`'s dependencies to `limit` depth. `limit=2`(default) """ function print_pkg_dependencies(pkgname::AbstractString, limit::Int=2) function printdep_uuid(uuid, nth, pre_str, depth) pkginf = Pkg.dependencies()[uuid]; N = length(pkginf.dependencies); if N > 0 m = 1 for (k, v) in pkginf.dependencies next_str, keisen = begin m == N ? (" ", "┗") : ("┃", "┣"); end version = Pkg.dependencies()[v].version; if isnothing(version) version = "" end println("$pre_str$keisen$k $version") if nth < depth printdep_uuid(v, nth + 1, pre_str * next_str, depth); end m = m + 1; end end end for (k, v) in Pkg.dependencies() if v.name == pkgname println("[$pkgname] $(v.version)"); printdep_uuid(k, 1, "", limit); end end end
次は実行結果
julia> print_pkg_dependencies("CSV") [CSV] 0.10.14 ┣WorkerUtilities 1.6.1 ┣InlineStrings 1.4.0 ┃┗Parsers 2.8.1 ┣PooledArrays 1.4.3 ┃┣DataAPI 1.16.0 ┃┗Future ┣PrecompileTools 1.2.1 ┃┗Preferences 1.4.3 ┣WeakRefStrings 1.4.2 ┃┣DataAPI 1.16.0 ┃┣InlineStrings 1.4.0 ┃┗Parsers 2.8.1 ┣CodecZlib 0.7.4 ┃┣Zlib_jll 1.2.13+1 ┃┗TranscodingStreams 0.10.7 ┣Tables 1.11.1 ┃┣DataAPI 1.16.0 ┃┣OrderedCollections 1.6.3 ┃┣LinearAlgebra ┃┣IteratorInterfaceExtensions 1.0.0 ┃┣DataValueInterfaces 1.0.0 ┃┗TableTraits 1.0.1 ┣Mmap ┣Unicode ┣Dates ┃┗Printf ┣FilePathsBase 0.9.21 ┃┣Dates ┃┣Compat 4.14.0 ┃┣Test ┃┣Mmap ┃┣UUIDs ┃┗Printf ┣Parsers 2.8.1 ┃┣Dates ┃┣PrecompileTools 1.2.1 ┃┗UUIDs ┗SentinelArrays 1.4.1 ┣Dates ┗Random
以前の日記の実行結果と比較すると,各パッケージのバージョンが上がっていて面白いですね。
というか上のソースも2年以上も前に書いたものなのか。質問の「以前はこんな感じで依存関係が表示できたはず」って何年前のことなんだろう?
まぁJuliaらしからぬ再帰を使ったソースなので実行速度は遅いですが,まぁ確認できればいいでしょ程度の代物。
なお,例で示しているCSV
が依存するパッケージの全部のネストを辿るには第2引数の深さ制限を8ぐらいにしないと全て表示できないようです。