Haskell新手和Python家伙。
我想我可能在这里遗漏了一些内容,但是如果你看Yesod's quickstart,那么autor会在 cabal sandbox init
之前安装一些包。我在其他地方看到过相同的模式。问题:
cabal sandbox init
不会更改PATH以匹配沙盒版本?非常感谢你!
答案 0 :(得分:8)
是的,这是如何使用沙箱。
cabal sandbox init
将为您创建一些文件/目录,以跟踪您已安装的软件包。
cabal install some_package
会将该软件包安装到沙箱中。
非常欢迎您将yesod-bin
安装到沙盒中。
阅读第2点
cabal sandbox init
并没有改变你的道路,因为它并不是真的需要。只需在PATH=.cabal-sandbox/bin:$PATH
中添加.bash_profile
即可。
与virtual-env不同,您永远不需要启用'或者'禁用'一个沙箱。您只需cd
进入目录,它就会自动启用。
我发现cabal沙箱唯一真正的缺点是你需要在根目录中才能对沙箱进行操作。这意味着,如果您在子目录中,则运行cabal install some_package
将不会将其安装到一个级别的沙箱中,而是将其安装到全局或用户数据库中,具体取决于您的方式{{1} 1}}已配置。
答案 1 :(得分:6)
cabal exec
允许您在沙箱的上下文中执行程序。它会更改路径以包含沙箱的bin
文件夹。您可以通过在沙箱中执行cabal exec printenv
来查看它。
此外,cabal
的最新版本允许您在没有.cabal
文件的文件夹中创建沙箱。运行cabal sandbox init
后,您只需cabal install
所需的依赖项。
因此,要使用不同版本的yesod-bin
,请将它们安装在不同的沙箱中,然后在每个沙箱中调用cabal exec yesod-bin
。
(额外提示:cabal exec gchi
是一个有用的命令,可以让ghci
知道沙箱的内容。)