【发布时间】:2014-10-27 10:24:59
【问题描述】:
如何获取特定包的版本号?
显而易见的方法是获取包含所有已安装包的字典,然后过滤出感兴趣的包:
pkgs = Pkg.installed();
pkgs["Datetime"]
不过,获取所有已安装包的列表非常慢,尤其是在有很多包的情况下。
【问题讨论】:
-
pkgs["Datetime"]对我没有任何帮助:Julia 版本0.5.2。
标签: julia
如何获取特定包的版本号?
显而易见的方法是获取包含所有已安装包的字典,然后过滤出感兴趣的包:
pkgs = Pkg.installed();
pkgs["Datetime"]
不过,获取所有已安装包的列表非常慢,尤其是在有很多包的情况下。
【问题讨论】:
pkgs["Datetime"] 对我没有任何帮助:Julia 版本 0.5.2。
标签: julia
为了查看间接包含的包的版本(例如,顶级项目包括依赖于模块 B 的模块 A,您需要了解有关模块 B 的信息),您必须从直接Manifest.toml,或者你必须从Pkg引入Context对象。
以下是使用 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
更新:或者没有 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
【讨论】:
using Pkg; m = Pkg.Operations.Context().env.manifest; v = m[findfirst(v->v.name=="Observables", m)].version 的版本
嗯,这在评论部分打印得不好...... 这是一个匹配名称而不是 UUID 的版本
using Pkg
m = Pkg.Operations.Context().env.manifest
v = m[findfirst(v -> v.name == "CSV", m)].version
【讨论】:
编辑:对于 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
Pkg.installed。在 1.0.0 版本中,我想你可能需要先using Pkg。
Pkg.installed 在1.0.0 及更高版本中可能有不同的含义。也许新的含义是“由用户直接安装的包,而不是依赖项”而不是“所有已安装的包”。肯定是 IDK,我还在 v0.6.4 上。
Julia 用户。我已将此答案重新分配给社区 wiki。请随时更新答案以获取最新的Julia 信息。谢谢!
在Julia 1.1你可以使用
(v1.1) pkg> status "name_of_the_package"
在给定环境中查找任何包的版本。
【讨论】:
我会试试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)。方法是特定包的一部分吗?
Pkg。
C:\Users\joe\.julia\environments\v1.5\Project.toml [37e2e46d] LinearAlgebra 但它没有告诉我版本。