【发布时间】:2017-11-03 02:20:12
【问题描述】:
如何“修复”特定版本的包?在朱莉娅?
这样,如果包破坏了现有代码,我们就不必更新包。
【问题讨论】:
-
在 REPL 中输入
?Pkg.pin -
其实我决定给出一个更正式的答案,因为我怀疑这个问题会被相当频繁地搜索。
如何“修复”特定版本的包?在朱莉娅?
这样,如果包破坏了现有代码,我们就不必更新包。
【问题讨论】:
?Pkg.pin
v1.0 之后
我对这个问题的原始答案现在在语法上已经过时了。 @RikH 提供了最新语法的答案。有关在 REPL 包模式或常规 REPL 中工作之间的语法差异的答案之外的其他信息,请在 REPL 中键入using Pkg,然后键入?Pkg.PackageSpec,以查看包版本/提交等方式的示例引用
v1.0 之前
official docs 中非常清楚地描述了执行此操作的过程。不过,我怀疑这个问题会经常被搜索,所以加倍也许没有坏处。
可以使用Pkg.pin 将包固定到特定版本。单一输入法会将包固定到当前版本:
julia> Pkg.pin("DependentBootstrap")
INFO: Creating DependentBootstrap branch pinned.b32df31a.tmp
julia> Pkg.status()
13 required packages:
...
- DependentBootstrap 0.1.0 pinned.b32df31a.tmp
- ForecastEval 0.1.0
您会注意到包已被固定到特定的 git 提交。
您可以使用第二个参数固定到特定包的特定标记版本:
julia> Pkg.pin("DependentBootstrap", v"0.0.1")
INFO: Creating DependentBootstrap branch pinned.996d3c22.tmp
INFO: Downgrading ForecastEval: v0.1.0 => v0.0.1
INFO: Building SpecialFunctions
INFO: Building Rmath
julia> Pkg.status()
13 required packages:
...
- DependentBootstrap 0.0.1 pinned.996d3c22.tmp
- ForecastEval 0.0.1
请注意,固定操作自动降级 ForecastEval 以满足版本要求。
您可以使用Pkg.free 将软件包恢复到最新的稳定版本:
julia> Pkg.free("DependentBootstrap")
INFO: Freeing DependentBootstrap
INFO: Upgrading ForecastEval: v0.0.1 => v0.1.0
INFO: Building SpecialFunctions
INFO: Building Rmath
julia> Pkg.status()
13 required packages:
...
- DependentBootstrap 0.1.0
- ForecastEval 0.1.0
请注意,ForecastEval 也已自动返回到最新版本。
【讨论】:
Pkg.pin("DependentBootstrap", v"0.0.1") 在 Julia 1.0.5 中返回“没有方法匹配 pin(::String, ::VersionNumber)”
这个问题已在 How to pin a package to a certain version using Julia 0.7? 中为 Julia 0.7 回答。以下内容可用于 Julia 1.0(似乎是 0.7)。
using Pkg
Pkg.add(PackageSpec(name = "GDAL", version = "0.1.2"))
Pkg.pin(PackageSpec(name = "GDAL", version = "0.1.2"))
或在 REPL 包模式下
julia> ]
pkg> add GDAL@0.1.2
pkg> pin GDAL@0.1.2
请注意,如果您使用PackageSpec,那么只有使用Pkg.add 才能安装正确的版本(使用Docker Image“julia:1.0.5-buster”测试)。
【讨论】:
Pkg.pin(PackageSpec(name = "JuMP", version ="0.18")) ERROR: UndefVarError: PackageSpec not defined 但(@v1.5) pkg> pin JuMP@0.18 运作良好,所以我想没关系
using Pkg在Pkg.add之前是必须的,所以我更新了答案。
对于 pkg 包的最后更新,接受的答案不再有效。
您必须在 @ 符号后指定版本。 pin Example@0.1.0
(v1.1) pkg> pin CSV@0.4.2
Resolving package versions...
Installed CSV ─ v0.4.2
Updating `C:\Users\S\.julia\environments\v1.1\Project.toml`
[336ed68f] ↓ CSV v0.4.3 ⇒ v0.4.2 ⚲
Updating `C:\Users\S\.julia\environments\v1.1\Manifest.toml`
[336ed68f] ↓ CSV v0.4.3 ⇒ v0.4.2 ⚲
⚲表示版本已成功固定。
更新了official manual的链接
【讨论】: