如何获取特定包的版本号?
显而易见的方法是使用所有已安装的软件包获取字典,然后筛选出感兴趣的软件包:
pkgs = Pkg.installed();
pkgs["Datetime"]
获取所有已安装软件包的列表非常慢,特别是如果有很多软件包。
答案 0 :(得分:7)
编辑:对于Julia版本1.0 +
Pkg.installed
似乎已经对新的套餐系统“退步”了。 Pkg.installed
没有参数。因此,OP的原始方法似乎是您目前可以做的最好的方法。
pkgs = Pkg.installed();
pkgs["Datetime"]
编辑:对于Julia版本高达0.6.4
您可以将字符串传递给Pkg.installed
。例如:
pkgs = Pkg.installed("JuMP")
我经常用methods
检查可用的调用参数。例如:
julia> methods(Pkg.installed)
# 2 methods for generic function "installed":
installed() at pkg/pkg.jl:122
installed(pkg::AbstractString) at pkg/pkg.jl:129
或
julia> Pkg.installed |> methods
# 2 methods for generic function "installed":
installed() at pkg/pkg.jl:122
installed(pkg::AbstractString) at pkg/pkg.jl:129
答案 1 :(得分:5)
我会尝试Pkg.status("PackageName")
这将打印出一些包含名称的模糊信息。
这是一个例子
julia> Pkg.status("QuantEcon")
- QuantEcon 0.0.1 master
答案 2 :(得分:0)
在Julia 1.1
中,您可以使用
(v1.1) pkg> status "name_of_the_package"
查找给定环境中任何软件包的版本。
答案 3 :(得分:0)
为了查看间接包含的软件包的版本(例如,顶层项目包括依赖于模块B的模块A,您需要在其中了解有关模块B的信息),您必须从直接将Manifest.toml导入,或者您必须从Context
中引入Pkg
对象。
下面是使用Julia 1.3.1进行的操作……从那时起,Pkg
的内部结构可能会发生变化。
using Pkg
ctx = Pkg.Operations.Context()
# Get the version of CSV.jl
version = ctx.env.manifest[UUID("336ed68f-0bac-5ca0-87d4-7b16caf5d00b")].version
if version <= v"0.5.24"
# handle some uniqueness about the specific version of CSV.jl here
end
或对Manifest.toml
using Pkg
# given the path to the Manifest.toml file...
manifest_dict = Pkg.TOML.parsefile(manifest_path)
# look for a named package like `CSV`
package_dict = manifest_dict[package_name][1]
@show package_dict
答案 4 :(得分:0)
好吧,这在评论部分打印得不好...... 这是一个匹配名称而不是 UUID 的版本
using Pkg
m = Pkg.Operations.Context().env.manifest
v = m[findfirst(v -> v.name == "CSV", m)].version