2

で cabal サンドボックスを作成すると、プロジェクトを作成せずにまたはをcabal sandbox init使用してこれらのパッケージを操作できます。cabal replcabal 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.

コンテンツをコピーせずに、サンドボックスのコンテンツを使用する方法はありますか?

4

1 に答える 1

3

問題は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
于 2016-07-21T14:40:06.793 に答える