web-dev-qa-db-ja.com

私のcabalパッケージはFUBARです。それらをパージして最初からやり直すにはどうすればよいですか?

プロファイリング用のライブラリのビルドを有効にするのを忘れました~/.cabal/config新しいマシンに一連のパッケージをインストールする前に、現在--reinstall world状況を修正しようとすると、すべてが壊れてしまいます(当然)。

すべてを一掃するのが私の時間のより良い使い方だと思います。どうすれば正しくできますか?

62
jberryman

Cabalはインストールされたものを追跡せず、ghcのライブラリメカニズム(またはghcを使用していない場合は他のコンパイラのライブラリメカニズム)を使用するだけなので、rm -r ~/.ghcを使用してローカルにインストールされたすべてのライブラリを削除できます。

複数のghcがインストールされており、特定のghcのライブラリのみを削除する場合は、削除するghcに対応するサブディレクトリを削除します。
たとえば、ghc-7.6.0用にインストールしたすべてのものをrm -r ~/.ghc/x86_64-linux-7.6.0.20120810で削除できます
これを使用して、必要に応じてghci_historyを保存することもできます。

ll ~/.ghc/
total 24
-rw-r--r-- 1 johnl johnl 2300 Aug 21 11:47 ghci_history
drwxr-xr-x 3 johnl johnl 4096 Jun 17 19:09 x86_64-linux-6.12.3
drwxr-xr-x 3 johnl johnl 4096 May 17 08:17 x86_64-linux-7.2.1
drwxr-xr-x 3 johnl johnl 4096 May 16 17:34 x86_64-linux-7.4.1
drwxr-xr-x 3 johnl johnl 4096 Jun 15 08:21 x86_64-linux-7.4.2
drwxrwxr-x 3 johnl johnl 4096 Aug 15 12:37 x86_64-linux-7.6.0.20120810

編集:~/.cabal/worldは、ユーザーが指定したバージョン制約のあるインストール済みパッケージのリストです。そのため、ほとんどの場合、たとえばmtl -anycabal install mtl-2.1.1を発行するなどして特定のバージョンのパッケージをインストールした場合、そのバージョンが記録されます。ワールドファイルを削除して最初からやり直すことができるはずです。または、ファイルを確認して依存関係が許容できる場合は、cabal install worldを実行してみてください。または、それを無視して、cabalの世界サポートを使用しないようにすることもできます(それが私がしていることです)。

59
John L

この ghc-pkg-reset Shellスクリプトは、〜/ .ghc /と〜/ .cabal /の両方を、もう少し選択的に削除します。 (そして、付随するghc-pkg-cleanスクリプトは、混乱したパッケージのインストールからの回復を助け、おそらくリセットを避けることができます。)これらは便利だと思います。

18
Simon Michael