ujimushiの日記: julia言語でインストールしているパッケージの依存関係をなんちゃってツリー表示する
少し前に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
julia言語でインストールしているパッケージの依存関係をなんちゃってツリー表示する More ログイン