Ответ 1
Вы можете ghc-pkg unregister
указать конкретную версию, например:
$ ghc-pkg unregister --force regex-compat-0.95.1
Этого должно быть достаточно.
Happstack Lite ломается от меня, потому что он получает blaze-html версии 0.5, и ему нужна версия 0.4. Кабал говорит, что установлены обе версии 0.4.3.4 и 0.5.0.0. Я хочу удалить 0.5.0.0 и использовать только старую версию. Но у cabal нет команды "удалить", и когда я пытаюсь ghc-pkg unregister --force blaze-html
, ghc-pkg
говорит, что моя команда была проигнорирована.
Что мне делать?
ОБНОВЛЕНИЕ. Не верьте. Хотя ghc-pkg
утверждает, что игнорирует команду, команда не игнорируется. И с принятым Доном Стюартом ответом вы можете удалить именно ту версию, которую вы хотите устранить.
Вы можете ghc-pkg unregister
указать конкретную версию, например:
$ ghc-pkg unregister --force regex-compat-0.95.1
Этого должно быть достаточно.
Если вы находитесь за пределами песочницы:
ghc-pkg unregister --force regex-compat-0.95.1
Если вы находитесь внутри cabal sandbox:
cabal sandbox hc-pkg -- unregister attoparsec --force
Первый --
- разделитель аргументов для hc-pkg
. Это выполняется с помощью ghc-pkg
в виде песочницы.
Существует также cabal-uninstall пакет, который предоставляет команду cabal-uninstall
. Он отменяет регистрацию пакета и удаляет папку. Стоит отметить, что он передает --force
в ghc-pkg unregister
, чтобы он мог разбить другие пакеты.
Здесь оболочка script используется для удаления пакета. Он поддерживает несколько установленных версий 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