問題は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
-package-db
別の方法として、GHC を以下で使用する場合、パッケージ データベースを直接指定することもできます。
$ 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