【问题标题】:Julia: how I "fix" a package at a particular version?Julia:我如何“修复”特定版本的包?
【发布时间】:2017-11-03 02:20:12
【问题描述】:

如何“修复”特定版本的包?在朱莉娅?

这样,如果包破坏了现有代码,我们就不必更新包。

【问题讨论】:

  • 在 REPL 中输入 ?Pkg.pin
  • 其实我决定给出一个更正式的答案,因为我怀疑这个问题会被相当频繁地搜索。

标签: package julia


【解决方案1】:

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)”
【解决方案2】:

这个问题已在 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 运作良好,所以我想没关系
  • 这很奇怪,对我来说,确切的代码才有效。我和你一样使用 Julia 1.5。可能using PkgPkg.add之前是必须的,所以我更新了答案。
【解决方案3】:

对于 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的链接

【讨论】:

  • 嗨,欢迎来到 Stack Overflow。请编辑您的解决方案以准确解释它如何与/更新现有接受的答案。谢谢。
猜你喜欢
  • 2021-03-27
  • 2018-06-15
  • 1970-01-01
  • 1970-01-01
  • 2020-05-25
  • 2019-12-15
  • 1970-01-01
  • 1970-01-01
  • 2018-09-26
相关资源
最近更新 更多