【问题标题】:Is there a way to use Cabal to keep Haskell packages up-to-date?有没有办法使用 Cabal 使 Haskell 包保持最新?
【发布时间】:2015-08-18 16:29:55
【问题描述】:

我对阴谋集团的工作方式感到困惑。我习惯于包管理器,它们的核心功能是能够轻松更新所有已更改的包,或者至少在我的系统上获取可用更新的包列表。但Cabal 似乎缺乏这种功能。我错过了什么吗?

有没有办法:

  1. 自动或轻松更新所有过时的软件包;或者,如果做不到这一点,
  2. 获取安装在我的系统上且有可用更新的软件包列表?

【问题讨论】:

  • 几乎所有cabal 包都不依赖于最新版本的依赖包,而是依赖于该依赖包的特定版本。 Cabal 通过下载 required 包版本而不是 最新 包版本来解决依赖关系。
  • @recursion.ninja:有没有办法做(2)——等等,我的数字去哪儿了?! ——也就是说,获取相对于我系统上当前更新的软件包列表?
  • @recursion.ninja:而且,我不确定我是否理解模型。比如说,我拥有的 X 版本(取决于未更改的 a、b 和 c,以及已更改的 p、q 和 r)比当前版本旧,我想要升级它。我该如何继续更新 X? (例如,在 Python 中使用 pip,我只需更新 X、p、q 和 r——或者更简洁地说,更新 X 会更新 p、q 和 r——我就完成了;不用担心。)
  • cabal update && cabal info packageName。查看输出以查看packageName 的可用版本号。这将向您显示所有可用版本以及您已安装的版本。要安装特定版本,例如较新的版本,请执行以下操作:cabal install packageName-1.2.3.4 其中1.2.3.4 是较新的版本号。
  • 您应该注意,安装较新版本不会将较新版本链接到依赖packageName 的其他软件包。

标签: haskell cabal


【解决方案1】:

cabal 缺少许多标准的包管理功能。这是其中之一,而(传递)删除包是另一个。党的路线是 cabal 旨在成为一个自动构建工具,仅此而已。尽管随着岁月的流逝,这条线变得越来越细。

如果您知道要升级哪些软件包,则可以;通常cabal updatecabal install those packages 会从Hackage 中获取最新的软件包列表,并尝试找到一个安装计划来安装所请求软件包的最新版本。您可以使用cabal install --dry-run those packages 询问安装计划而不执行它;如果它看起来不像选择了你想要的版本,你可以添加约束,如

cabal install those packages --constraint 'those>=9000'

【讨论】:

  • 定期运行this workaround 有意义吗?
  • @raxacoricofallapatorius 我建议不要定期自动运行它。当你发现你需要一个更新版本的包并且cabal install packageName-1.2.3.4由于已经安装的包而无法解决依赖关系时,只需运行它。预计至少需要一个小时重新编译许多包...
  • @raxacoricofallapatorius 这看起来像是一种启动俗称“阴谋集团地狱”的惊人方式。 (至少,您应该在一个命令中告诉 cabal 您要重新安装的所有包,而不是每个包运行一个命令。)另一方面,想办法摆脱 cabal 地狱几次会教你很多关于阴谋集团如何运作的知识......
  • 是的,似乎使用--dry-run 而不是--reinstall 的解决方法可能会产生一些信息,可用作必要时有针对性的重新安装的起点。 “Cabal Hell”对我来说似乎是多余的。
  • @raxacoricofallapatorius 顺便说一句,你可能会喜欢SICP
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多