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

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

作者: 昵称违法 | 来源:发表于2021-08-04 11:32 被阅读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

    相关文章

      网友评论

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

          本文链接:https://www.haomeiwen.com/subject/zwwevltx.html