【问题标题】:Re-using Haskell Platform prebuilt libraries within a cabal sandbox?在 cabal 沙箱中重用 Haskell 平台预建库?
【发布时间】:2014-02-12 21:00:28
【问题描述】:

当我在没有沙箱的情况下构建 Cabal 项目时,Cabal 会使用我安装的 Haskell 平台中的现有库。但是,如果我尝试在 Cabal 沙箱中执行相同的操作,Cabal 会强制将我的所有依赖项重新构建到沙箱中。

为了节省构建时间和磁盘空间,最好能够指示 Cabal 使用现有的 Haskell 平台库而不是重新构建它们。这可能吗?

示例 (files in a gist):

executable blog
  hs-source-dirs:    .
  main-is:           Test.hs
  build-depends:     base >= 4.5 && < 5
                   , text

如果我在包含此.cabal 文件的目录中cabal build,我的Test 模块将针对text 的Haskell 平台版本构建。

但是,如果我在沙盒中做同样的事情:

cabal clean # (or alternatively clone an empty gist)
cabal sandbox init
cabal build

我明白了:

$ cabal build
Package has never been configured. Configuring with default flags. If this
fails, please run configure manually.
Resolving dependencies...
Configuring install-test-0.1...
cabal: At least the following dependencies are missing:
text -any

如果我现在去cabal install,最新的text 库是在我的沙箱下从头开始构建的。

【问题讨论】:

  • 我刚刚尝试了git clone https://gist.github.com/8964143.git &amp;&amp; cd 8964143 &amp;&amp; cabal sandbox init &amp;&amp; cabal run,这对我有用,无需重新编译依赖项。在 Windows 上安装 Cabal 1.18.0.2 和 Cabal 1.18.1.2。
  • 嗯,也许我需要在较新的阴谋集团上尝试一下。我的是cabal --versioncabal-install version 1.18.0.2, using version 1.18.1.1 of the Cabal library。或者是某种安装版本冲突。 :(
  • @Toxaris:你在第一个cabal build 和第二个cabal sandbox init &amp;&amp; cabal build 之间做了cabal clean 吗?如果这对您有用,那么克隆 gist 然后直接执行 cabal sandbox init &amp;&amp; cabal build 怎么样?我意识到我的说明没有提到关于干净构建的部分。我将编辑我的帖子以包含此信息。
  • 我从我的评论中直接执行了命令行,所以是的,我克隆了要点,然后直接执行cabal sandbox init。现在我也尝试了git clone https://gist.github.com/8964143.git &amp;&amp; cd 8964143 &amp;&amp; cabal build &amp;&amp; cabal sandbox init &amp;&amp; cabal rungit clone https://gist.github.com/8964143.git &amp;&amp; cd 8964143 &amp;&amp; cabal build &amp;&amp; cabal sandbox init &amp;&amp; cabal run。他们都做一些配置和编译,然后打印“hello”。
  • 我认为在这两种情况下你都会从cabal build 得到剩余的东西,这意味着沙盒构建什么都不做。你可以试试git clone https://gist.github.com/8964143.git &amp;&amp; cd 8964143 &amp;&amp; cabal sandbox init &amp;&amp; cabal run - 它不应该工作。对此来回感到抱歉。

标签: haskell sandbox cabal cabal-install


【解决方案1】:

根据cabal-install bug #1695,目前不支持此功能。它最终可能会被构建,请参阅multi-instance packages 了解更多信息。

如果有人在阅读和关心,对某些用户来说应该可行的替代方法是在多个项目之间共享一个 cabal 沙箱。这样,您仍然可以将 Haskell 平台安装与开发期间所需的库安装分开。更多关于An Introduction to Cabal sandboxes

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-11
    • 1970-01-01
    • 1970-01-01
    • 2015-08-21
    相关资源
    最近更新 更多