web-dev-qa-db-ja.com

「陰謀団のアップグレード」を行わないための最良の回避策は何ですか?

cabal install --upgrade-dependenciesを使用した特定のパッケージだけでなく、すべてのパッケージをアップグレードしたい。

37
gatoatigrado

このシェルハッカリーは、OSXで機能します。

cabal list --simple-output --installed | awk '{print $1}' | uniq | xargs -I {} cabal install {} --reinstall

[〜#〜] edit [〜#〜]:再インストールを強制し、複数のバージョンが存在する場合にパッケージを複数回インストールすることを回避するようになりました。コメントありがとうございます!

後で編集:CabalサンドボックスとStackが存在するようになったので、パッケージを適切にアップグレードしようとしないことを強くお勧めします。代わりに、既存のサンドボックスを一掃して最新の依存関係を再インストールできれば、頭痛の種ははるかに少なくなります。

51
acfoltzer

.cabal/worldファイルには、明示的にインストールしたすべてのパッケージのリストが含まれています(依存関係を介してプルされるのではなく、cabal installコマンドにリストされます)。依存関係としてのみ役立つパッケージ、非推奨のパッケージ、およびアップグレードしたいバージョンロックされたパッケージを削除するには、トリミングします。

Cabalはそれ自体をクリーンアップする方法を知りませんが、ほとんどすべてを削除できます。次のコマンドは、.cabal/packages(tarballキャッシュ)から再インストールします。

cp -t bin .cabal/bin/cabal
rm -rf .cabal/{bin,lib,share} .ghc/*-*-*/
ghc-pkg check |&egrep -- '^[A-Za-z0-9-]+-[0-9]' |xargs -n1 --no-run-if-empty ghc-pkg unregister

次に、手動でインストールしたものをすべて再インストールします。

cabal install world --upgrade-dependencies --force-reinstalls
7
Tobu