ujimushi(@旧sradjp(15364))の日記

旧スラドの日記の引越先です

How to check what other packages an installed package uses?[勝手に回答]

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