【问题标题】:Julia - getting the version number of my moduleJulia - 获取我的模块的版本号
【发布时间】:2020-03-08 11:34:57
【问题描述】:

我正在为 Julia 编写一个包,我希望能够在包中打印我的包的当前版本号。我当然可以手动执行此操作,但我正在寻找一种直接从模块中读取它的方法。版本号写在 Project.toml 文件中,但我无法找到从代码中读取它的方法。有什么想法吗?

【问题讨论】:

    标签: package julia


    【解决方案1】:

    你可以使用类似的东西

    julia> using Pkg
    
    julia> loadedversion(m::Module) =  VersionNumber(Pkg.TOML.parsefile(joinpath(string(first(methods(m.eval)).file), "..", "..", "Project.toml"))["version"])
    loadedversion (generic function with 1 method)
    
    julia> loadedversion(Atom)
    v"0.12.8"
    

    当然,一些错误处理是谨慎的,但这将为您提供实际加载的包的版本(而不是当前环境中指定的版本)。

    【讨论】:

    • 我想这将在我的模块之外工作,但我想在模块内访问它。例如。这样我就可以在我的模块日志中打印当前版本号
    • 如果你在Package/src/Package.jl中定义了这个方法,那么你可以使用VersionNumber(Pkg.TOML.parsefile(joinpath(@__DIR__, "..", "Project.toml"))["version"])来代替。
    【解决方案2】:

    可能——

    using Pkg
    Pkg.TOML.parse(read("Project.toml", String))["version"]
    

    ->“0.0.1”

    【讨论】:

    • 我试过这个,但是它读取的Project.toml文件属于调用函数。这意味着它读取调用我的模块的代码的假设项目文件。
    • @dpac,只需 cd 到相应的目录。
    【解决方案3】:
    using Pkg
    function pkginfo(pkgname::AbstractString, key = "version")
        # Check if Package Project
        proj = Pkg.TOML.parsefile(Base.current_project()) 
        proj["name"] == pkgname && return proj[key]
        
        # If not in Project, pkgname must be in deps. Look in Manifest.toml
        # An error will be thrown if Manifest.toml is missing
        man = Pkg.TOML.parsefile(joinpath(Base.current_project() |> dirname, "Manifest.toml"));
        for (pkg, info) in man
            pkginfo = info |> first # Play with 'man' to see why
            pkg == pkgname && return pkginfo[key]
        end
    end
    

    这将为您提供当前环境中包(或其他数据)的版本(作为字符串)。但是一个包可能在堆栈中更深的环境中,所以......

    【讨论】:

      【解决方案4】:

      难道这是一个答案?

      using Pkg
      Pkg.project().version
      
      v"0.1.2"
      

      【讨论】:

        猜你喜欢
        • 2023-02-21
        • 2015-12-27
        • 1970-01-01
        • 2011-04-01
        • 2018-04-01
        • 2014-01-19
        • 2021-02-25
        • 1970-01-01
        相关资源
        最近更新 更多