パスワードを忘れた? アカウント作成
15460474 journal
日記

ujimushiの日記: julia言語でインストールしているパッケージの依存関係をなんちゃってツリー表示する

日記 by 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.9.6
┣InlineStrings 1.0.1
┃┗Parsers 2.0.6
┣PooledArrays 1.3.0
┃┣DataAPI 1.9.0
┃┗Future
┣WeakRefStrings 1.4.1
┃┣DataAPI 1.9.0
┃┣InlineStrings 1.0.1
┃┗Parsers 2.0.6
┣CodecZlib 0.7.0
┃┣Zlib_jll
┃┗TranscodingStreams 0.9.6
┣Tables 1.6.0
┃┣DataAPI 1.9.0
┃┣LinearAlgebra
┃┣Test
┃┣IteratorInterfaceExtensions 1.0.0
┃┣DataValueInterfaces 1.0.0
┃┗TableTraits 1.0.1
┣Mmap
┣Unicode
┣Dates
┃┗Printf
┣FilePathsBase 0.9.12
┃┣Dates
┃┣Test
┃┣Mmap
┃┣UUIDs
┃┗Printf
┣Parsers 2.0.6
┃┗Dates
┗SentinelArrays 1.3.7
 ┣Dates
 ┗Random

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

人生の大半の問題はスルー力で解決する -- スルー力研究専門家

読み込み中...