Я хочу обновить все пакеты, а не только один с cabal install --upgrade-dependencies
.
Какое лучшее обходное решение для того, чтобы не иметь "модернизацию"?
Ответ 1
Этот бит хакерской игры работает для меня на OS X:
cabal list --simple-output --installed | awk '{print $1}' | uniq | xargs -I {} cabal install {} --reinstall
EDIT: теперь принудительно переустанавливает и не требует установки пакета более одного раза, когда присутствует более одной версии. Спасибо за комментарии!
EDIT YEARS LATER: теперь, когда существуют песочницы Cabal и Stack, я настоятельно рекомендую не пытаться обновлять пакеты на месте. Вы получите гораздо меньше головных болей, если вместо этого вы можете просто стереть существующую песочницу и переустановить современные зависимости.
Ответ 2
Файл .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