Mac で Cabal Sandbox 環境を整える

Cabal Hell を回避するためのSandbox 環境を整えたときのメモ。

Cabal Sandbox

cabal-install-1.18 から Sandbox 環境が使える。プロジェクトごとに .cabal-sandbox/ ディレクトリを作って依存ライブラリを管理してくれる。

Mac OX での環境構築

Homebrew でHaskell-Platform を入れているが、Cabal のバージョンが 1.16 なので、Sandbox に対応していない。まずは、cabal-install の最新バージョンをインストールする。

cabal install cabal-install

cabal install しただけだと、古いバージョンが参照されるので使えない。以下のような状態になっている。

$ cabal sandbox init
cabal: unrecognised command: sandbox (try --help)

$ cabal --version
cabal-install version 1.16.0.2
using version 1.16.0 of the Cabal library

$ ~/.cabal/bin/cabal --version
cabal-install version 1.20.0.3
using version 1.20.0.2 of the Cabal library

参考) cabal: unrecognised command: sandbox (try –help) #38

$HOME/.cabal/ 配下にインストールされるため、バイナリファイルをPATH が通っている別の場所に移動する。面倒なので Homebrew で入れたファイルを上書きした。

cp $HOME/.cabal/bin/cabal /usr/local/bin/cabal

あとは、Cabal プロジェクトごとに cabal sandbox init をすればOK.

Cabal Hell の対処方法

Sandbox がない場合

ホームディレクトリに依存ライブラリのデータが保存されているので、サクッと削除する。

rm -rf ~/.ghc/ ~/.cabal/

共通で使っているとすべてのプロジェクトに影響するので注意。注意と言っても大抵にっちもさっちも行かない状態なので、rm -rf するしか無いけど・・・。そして、削除後は cabal update からやり直す。

Sandbox がある場合

対象のSandbox を削除して作り直すだけでOK.

cabal sandbox delete
cabal sandbox init

cabal install —only-dependencies
cabal configure