Как лучше обойтись без «улучшения Кабалы»? - PullRequest
37 голосов
/ 02 августа 2011

Я хочу обновить все пакеты, а не только конкретный с cabal install --upgrade-dependencies.

Ответы [ 2 ]

51 голосов
/ 02 августа 2011

Этот бит взлома оболочки работает для меня в OS X:

cabal list --simple-output --installed | awk '{print $1}' | uniq | xargs -I {} cabal install {} --reinstall

EDIT : теперь принудительно переустанавливает и избегает установки пакета более одного раза, когда более одной версиинастоящее.Спасибо за комментарии!

РЕДАКТИРОВАТЬ ГОДА ПОЗЖЕ : теперь, когда существуют песочницы Cabal и стек, я настоятельно рекомендую не пытаться обновить пакеты на месте.Вы получите гораздо меньше головной боли, если вместо этого сможете просто стереть существующую изолированную программную среду и переустановить обновленные зависимости.

7 голосов
/ 03 января 2015

Файл .cabal/world содержит список всех пакетов, которые вы установили явным образом (перечисленных в команде cabal install, в отличие от проверенных зависимостей).Обрежьте его, чтобы удалить пакеты, которые полезны только как зависимости, пакеты, которые устарели, и пакеты с заблокированной версией, которые вы бы предпочли обновить.можно удалить практически все.Следующая команда будет переустановлена ​​из .cabal/packages (кеш архива):

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
...