问题是它cabal
只会尊重当前工作目录中的沙箱。但是,有几个选项可以指定 cabal 的沙箱位置或 GHC 的包数据库。
使用 cabal 功能
您可以使用cabal
'--sandbox-config-file
选项来指定沙箱配置,例如
$ cabal --sandbox-config-file=/tmp/example/cabal.sandbox.config exec ghci
Prelude> :m Test.QuickCheck
Prelude Test.QuickCheck>
这也使您能够从其他地方更改沙箱,如果您只想将随机的东西安装到临时位置,这会派上用场:
$ cabal --sandbox-config-file=/tmp/example/cabal.sandbox.config install lens
$ cabal --sandbox-config-file=/tmp/example/cabal.sandbox.config repl
Prelude> :m Control.Lens
Prelude Control.Lens> :m Test.QuickCheck
Prelude Control.Lens Test.QuickCheck>
由于这会在一段时间后变得很麻烦,您可能应该添加一个别名
$ alias sandboxed-cabal="cabal --sandbox-config-file=/tmp/example/cabal.sandbox.config"
$ sandboxed-cabal repl
Prelude>
使用ghc -package-db
或者,您可以在使用 GHC 时直接指定包数据库-package-db
:
$ ghci -package-db /tmp/example/.cabal-sandbox/<ARCH>-packages.conf.d
Prelude> :m Test.QuickCheck
Prelude Test.QuickCheck>
这<ARCH>
取决于您的系统和使用的 GHC,例如在 64 位 Linux 和 GHC 7.10.3 上是x86_64-linux-ghc-7.10.3-packages.conf.d
. 然后,您可以使用该数据库中的所有包:
$ ghci -package-db /tmp/example/.cabal-sandbox/<ARCH>-packages.conf.d
Prelude> :m Control.Lens
Prelude Control.Lens>
同样,别名应该派上用场。
使用GHC_PACKAGE_PATH
最后但并非最不重要的一点是,您可以调整环境变量。但是,如果环境变量GHC_PACKAGE_PATH
存在,它会覆盖 GHC 常用的包数据库,所以你也需要检查ghc-pkg list
并添加它们
$ GHC_PACKAGE_PATH=/opt/ghc/7.10.3/lib/ghc-7.10.3/package.conf.d/:/tmp/example/.cabal-sandbox/x86_64-linux-ghc-7.10.3-packages.conf.d ghci
或使用-global-package-db
并-user-package-db
重新启用它们:
$ GHC_PACKAGE_PATH=/tmp/example/.cabal-sandbox/x86_64-linux-ghc-7.10.3-packages.conf.d ghci -global-package-db -user-package-db