【问题标题】:Why cabal sandbox init does not change PATH like virtualenv does?为什么 cabal 沙箱 init 不会像 virtualenv 那样更改 PATH?
【发布时间】:2015-01-25 21:25:27
【问题描述】:

这里是 Haskell 新手和 Python 人。

我想我可能在这里遗漏了一些东西,但如果你查看Yesod's quickstart,作者会在 之前 cabal sandbox init 安装一些软件包。我在其他地方也看到过同样的模式。问题:

  1. 我错过了什么吗?这是真正使用 cabal 沙盒的方法吗?
  2. 为什么我不能(或不应该)在沙盒中安装 yesod-bin?
  3. 如果我在某些项目中使用不同版本的 yesod-bin 会怎样?
  4. 如果有一些库在 .cabal-sandbox/bin 中安装二进制文件,为什么 cabal sandbox init 不更改 PATH 以匹配沙盒版本?

非常感谢您!

【问题讨论】:

    标签: haskell sandbox cabal package-managers


    【解决方案1】:
    1. 是的,这就是沙盒的使用方法。

      cabal sandbox init 将为您创建一些文件/目录,用于跟踪您已安装的软件包。

      cabal install some_package 会将该软件包安装到沙箱中。

    2. 非常欢迎您将yesod-bin 安装到沙盒中。

    3. 读取点 2

    4. cabal sandbox init 不会改变你的路径,因为它真的不需要。只需在您的.bash_profile 中添加PATH=.cabal-sandbox/bin:$PATH

      与 virtual-env 不同,您永远不需要“启用”或“禁用”沙盒。您只需将cd 放入一个目录,它就会自动启用。

      我发现 cabal 沙箱的唯一真正缺点是,您需要位于根目录中才能对沙箱采取行动。这意味着,如果您在子目录中,运行 cabal install some_package 不会将其安装到更高级别的沙箱中,而是会将其安装到全局或用户数据库中,具体取决于您如何配置 cabal .

    【讨论】:

    • 比我想象的要好。谢谢!
    • 如果您不在 cabal 沙箱的根目录中,您仍然可以通过将 cabal 指向正确的配置文件来在该沙箱中工作:cabal --config=<path>\cabal.sandbox.config <command>
    【解决方案2】:

    cabal exec 允许您在沙箱的上下文中执行程序。它会更改路径以包含沙盒的 bin 文件夹。您可以通过在沙箱内执行cabal exec printenv 来查看它。

    此外,最新版本的cabal 允许您在没有.cabal 文件的文件夹中创建沙盒。运行 cabal sandbox init 后,您只需 cabal install 您需要的依赖项即可。

    因此,要使用不同版本的yesod-bin,请将它们安装在不同的沙箱中,然后在每个沙箱上调用cabal exec yesod-bin

    (额外提示:cabal exec gchi 是一个有用的命令,可以让 ghci 了解沙箱的内容。)

    【讨论】:

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