Happstack Lite ломает меня, потому что он получает версию 0.5 blaze-html и ему нужна версия 0.4. Кабал говорит, что установлены обе версии 0.4.3.4 и 0.5.0.0. Я хочу удалить 0.5.0.0 и использовать только старую версию. Но у Кабала нет команды "удалить", и когда я пытаюсь ghc-pkg unregister --force blaze-html
, ghc-pkg
говорит , что моя команда проигнорирована.
Что мне делать?
ОБНОВЛЕНИЕ : не верьте . Хотя ghc-pkg
утверждает, что игнорирует команду, команда не игнорируется. И с принятым ответом Дона Стюарта вы можете удалить именно ту версию, которую хотите удалить.
ghc-pkg list blaze-html
? Вы уверены, что используете его как правильный пользователь? Может быть, прямо указать версию, которую нужно отменить?ghc-pkg
солгал мне!cabal-uninstall
упомянуто в ответе ниже ? Кабала-удаление более действенна? Может ли он работать с песочницей Cabal (будетcabal exec -- cabal-delete
работать корректно и удалять пакеты из песочницы)? Почему бы не дать и этому ответу? Похоже, хороший инструмент.Ответы:
Вы можете
ghc-pkg unregister
конкретную версию, например:Этого должно быть достаточно.
источник
~/.cabal/
папку, чтобы узнать, где находятся pkgs и двоичные файлыЕсли вы находитесь за пределами песочницы:
Если вы находитесь в песочнице Кабала :
Первый
--
- это разделитель аргументов дляhc-pkg
. Это работаетghc-pkg
в режиме песочницы.источник
Также существует пакет cabal-uninstall , который предоставляет
cabal-uninstall
команду. Он отменяет регистрацию пакета и удаляет папку. Тем не менее, стоит упомянуть, что он переходит--force
к нему,ghc-pkg unregister
поэтому он может сломать другие пакеты.источник
cabal uninstall
результатыcabal: unrecognised command: uninstall (try --help)
Вот сценарий оболочки, который я использую для удаления пакета. Он поддерживает несколько установленных версий GHC, а также стирает соответствующие файлы (но предоставляется без гарантии, не обвиняйте меня, если вы пропустите свою установку!)
#!/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
источник