我正在为Julia编写一个包,在这个包中,我想能够打印出我的包的当前版本号。当然,我可以手动完成这项任务,但我正在寻找一种直接从模块中读取它的方法。版本号写在Project.toml文件中,但我还没有找到从代码中读取它的方法。有什么好的想法吗?
你可以使用类似的东西
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"
当然,进行一些错误处理是很明智的,但这将为您提供实际加载的软件包版本(而不是当前环境中指定的版本)。
using Pkg
Pkg.TOML.parse(read("Project.toml", String))["version"]
-> "0.0.1"
cd
到适当的目录。 - PatrickT这是一个答案吗?
using Pkg
Pkg.project().version
v"0.1.2"
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
Package/src/Package.jl
中定义了此方法,则可以使用VersionNumber(Pkg.TOML.parsefile(joinpath(@__DIR__, "..", "Project.toml"))["version"])
。 - pfitzseb