web-dev-qa-db-fra.com

Comment puis-je désinstaller une version d'un package Cabal?

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.

82
Norman Ramsey

Vous pouvez ghc-pkg unregister une version spécifique, comme ceci:

$ ghc-pkg unregister --force regex-compat-0.95.1

Cela devrait suffire.

95
Don Stewart

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.

23
musically_ut

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.

20
Davorak

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
6
Ben Millwood