Happstack Lite est sur moi parce qu'il obtient la version 0.5 de blaze-html et qu'il veut la version 0.4. Cabal dit que les deux versions 0.4.3.4 et 0.5.0.0 sont installées. Je veux supprimer la 0.5.0.0 et utiliser uniquement l'ancienne version. Mais cabal n'a pas de commande de "désinstallation", et quand j'essaie ghc-pkg unregister --force blaze-html
, ghc-pkg
indique que ma commande a été ignorée.
Que fais-je?
MISE À JOUR : Ne le croyez pas . Bien que ghc-pkg
prétend ignorer la commande, la commande n'est pas ignorée. Et avec la réponse acceptée de Don Stewart, vous pouvez supprimer exactement la version que vous souhaitez éliminer.
Vous pouvez ghc-pkg unregister
une version spécifique, comme ceci:
$ ghc-pkg unregister --force regex-compat-0.95.1
Cela devrait suffire.
Si vous êtes à l'extérieur d'un bac à sable:
ghc-pkg unregister --force regex-compat-0.95.1
Si vous êtes dans un bac à sable cabal :
cabal sandbox hc-pkg -- unregister attoparsec --force
La première --
est le séparateur d'arguments pour hc-pkg
. Cela s'exécute ghc-pkg
d'une manière compatible avec le bac à sable.
Il y a aussi le paquet cabal-uninstall qui fournit un cabal-uninstall
commande. Il annule l'enregistrement du package et supprime le dossier. Il convient de mentionner cependant qu'il passe --force
à ghc-pkg unregister
pour casser d'autres paquets.
Voici un script Shell que j'utilise pour désinstaller un package. Il prend en charge plusieurs versions installées de GHC et efface également les fichiers pertinents (mais est fourni sans garantie, ne me blâmez pas si vous installez votre installation!)
#!/bin/bash -eu
# Usage: ./uninstall.sh [--force | --no-unregister] pkgname-version
# if you set VER in the environment to e.g. "-7.0.1" you can use
# the ghc-pkg associated with a different GHC version
: ${VER:=}
if [ "$#" -lt 1 ]
then
echo "Usage: $0 [--force | --no-unregister] pkgname-version"
exit 1
fi
if [ "$1" == "--force" ]
then force=--force; shift; # passed to ghc-pkg unregister
else force=
fi
if [ "$1" == "--no-unregister" ]
then shift # skip unregistering and just delete files
else
if [ "$(ghc-pkg$VER latest $1)" != "$1" ]
then
# full version not specified: list options and exit
ghc-pkg$VER list $1; exit 1
fi
ghc-pkg$VER unregister $force $1
fi
# wipe library files
rm -rfv -- ~/.cabal/lib/$1/ghc-$(ghc$VER --numeric-version)/
# if the directory is left empty, i.e. not on any other GHC version
if rmdir -- ~/.cabal/lib/$1
then rm -rfv -- ~/.cabal/share/{,doc/}$1 # then wipe the shared files as well
fi