如果我使用创建了一个综合沙箱cabal sandbox init
,则可以在不创建项目的情况下使用cabal repl
或cabal exec ghc(i)
使用这些包:
$ mkdir /tmp/example && cd /tmp/example
$ cabal sandbox init
$ cabal install QuickCheck
$ cabal exec ghci
Prelude> :m Test.QuickCheck
Prelude Test.QuickCheck>
但是,如果我将路径更改为其他路径,甚至更改为子目录,那么我将无法再访问软件包:
$ mkdir -p /tmp/example/sub && cd /tmp/example/sub
$ cabal exec ghci
Prelude> :m Test.QuickCheck
<no location info>:
Could not find module ‘Test.QuickCheck’
It is not a module in the current program, or in any known package.
有什么方法可以使用沙箱中的内容,而无需复制其内容?
问题在于,cabal
它将仅尊重当前工作目录中的沙箱。但是,有几个选项可以为Cabal指定沙箱位置,也可以为GHC指定包装数据库。
您可以使用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
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句