我该如何获取特定软件包的版本号?
显而易见的方法是获取包含所有已安装软件包信息的字典,然后过滤出所需软件包的信息:
pkgs = Pkg.installed();
pkgs["Datetime"]
获取所有已安装软件包的列表非常缓慢,尤其是在存在许多软件包的情况下。
我该如何获取特定软件包的版本号?
显而易见的方法是获取包含所有已安装软件包信息的字典,然后过滤出所需软件包的信息:
pkgs = Pkg.installed();
pkgs["Datetime"]
获取所有已安装软件包的列表非常缓慢,尤其是在存在许多软件包的情况下。
编辑:对于 Julia 1.1+ 版本
使用 Pkg REPL 表示法:
] status # Show every installed package version
] status pkgName # Show the specific version of the package
] status pkgName1 pkgName2 # Show the named packages. You can continue the list.
]
进入 Pkg REPL,因此您可以直接编写 status ...
因此,在进入 Pkg REPL 后,您可以编写:
status DataFrame
或者使用面向对象的方法(注意:在这里您不需要进入Pkg REPL,也就是说,请勿使用]
):
Pkg.status("DataFrame")
编辑:对于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
julia> Pkg.installed(\tab
- ivarnePkg.installed
。在1.0.0版本中,我认为您需要先使用using Pkg
。 - rickhg12hsPkg.installed
可能有不同的含义。也许新的含义是“用户直接安装的包,而不是依赖项”,而不是“所有已安装的包”。我不确定,因为我仍然在v0.6.4上。 - rickhg12hsJulia
用户。我已将此答案重新分配给社区维基。请随时更新最新的 Julia
信息。谢谢! - rickhg12hs我会尝试 Pkg.status("PackageName")
这将会打印出一个简短的描述来说明包的名称。
以下是一个例子:
julia> Pkg.status("QuantEcon")
- QuantEcon 0.0.1 master
Pkg.status("QuantEcon")
在 Julia 0.3 中会报错 ERROR: 'status' has no method matching status(::ASCIIString)
。这个方法是属于特定的包吗? - JulianPkg
。 - Pierre H.C:\Users\joe\.julia\environments\v1.5\Project.toml
[37e2e46d] LinearAlgebra
但它没有告诉我版本号。 - skan(v1.1) pkg> status "name_of_the_package"
using Pkg
using UUIDs
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
更新:或者使用包名而不是UUID(感谢@HHFox):
using Pkg
pkg_name = "Observables"
m = Pkg.Operations.Context().env.manifest
v = m[findfirst(v->v.name == pkg_name, m)].version
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
这段代码在评论区域中无法正常打印... 这里有一个版本,它匹配名称而不是UUID
using Pkg
m = Pkg.Operations.Context().env.manifest
v = m[findfirst(v -> v.name == "CSV", m)].version
对于项目文件中指定的包的依赖包,可以在包模式下使用status -m <packageName>
或缩写st -m <packageName>
(After
]`)。
要获取完整列表,只需使用st -m
。
pkgs["Datetime"]
对于我没有任何效果: Julia版本为0.5.2
. - PatrickT