まだまだ続くよどこまでも。勝手に続く勝手に回答シリーズ。今回も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ぐらいにしないと全て表示できないようです。