julia中读所有已经安装的包的信息,以便对包进行管理

2021-08-04  本文已影响0人  昵称违法

需求:读取本机的包的信息,并生成一个dataframe表
使用场景:读取安装的包的信息,以便对包进行管理【卸载、升级...】

一般Pkg.status()不带参的时候,直接把结果输出到”控制台“,你也可以把它输出到IOBuffer中,然后用take出来,通过字符串分析,生成一个DataFrame表。

1、运行结果

image.png

2、代码


"""
读取本机所安装的包的信息,返回DataFrame

====out====
DataFrame

 Row │ id        name               ver      
     │ Any       Any                Any      
─────┼───────────────────────────────────────
   1 │ c52e3926  Atom               v0.12.32
   2 │ 6e4b80f9  BenchmarkTools     v1.0.0
   3 │ 336ed68f  CSV                v0.8.5
   4 │ 052768ef  CUDA               v3.2.1
   5 │ aaaa29a8  Clustering         v0.14.2
   6 │ 861a8166  Combinatorics      v1.0.2
   7 │ a0b5b9ef  Cxx                v0.4.0

"""
function get_pkg_info()
    io = IOBuffer()
    Pkg.status(;io)
    text = String(take!(io))
    lines = split(text,"\n") .|> strip #拆行,并去除各行的首位空格

    pkgs_info = DataFrame(id = [],name = [],ver = [])
    for (idx,line) in zip(1:length(lines),lines)
        #println(idx," ",line)
        if idx > 1
            if  isempty(line)
                continue
            end
             line_ary = split(line," ") .|> string
             #println(line_ary)
             id = line_ary[1] |>s->replace(s,"["=>"") |>s->replace(s,"]"=>"")
             name = line_ary[2]
             ver = length(line_ary) == 2 ? "" : line_ary[3]
             push!(pkgs_info,[id,name,ver])
        else
        end
    end
    return pkgs_info
end

#测试代码
df = get_pkg_info()
df |> println

3、用Pkg进行包的管理【请参考julia官网信息】

.....

4、最后的真相,查看包是否被安装的正确服用方式如下:Pkg.installed(),它返回的是一个字典,哈哈哈哈哈

image.png
上一篇下一篇

猜你喜欢

热点阅读