Подтвердить что ты не робот

Исправление проблем, отмеченных проверкой ghc-pkg

Хорошо, что ghc-pkg check будет отображать сломанные пакеты и почему они не работают. Но, насколько я знаю, нет автоматизированного способа позаботиться об этих сломанных пакетах. Каков рекомендуемый способ борьбы со сломанными пакетами? (Не рекомендуется переустанавливать GHC)

4b9b3361

Ответ 1

Надеюсь, вы были достаточно мудры, чтобы не нарушать их в своей глобальной базе данных пакетов. Ломать там легко может означать переустановку GHC. Итак, допустим, что обрыв ограничивается пакетом db пользователя (за исключением, возможно, пакета или двух в глобальном затененном пакетами пользователей). Если только несколько пакетов сломаны, вы можете исправить свою настройку, отменив регистрацию поврежденных пакетов,

$ ghc-pkg unregister --user borken

который часто жалуется, что незарегистрированный borken нарушит другие пакеты. Независимо от того, пытаетесь ли вы отменить регистрацию этих первых или незарегистрированных borken немедленно с помощью --force и иметь дело с недавно сломанными впоследствии, это в основном вопрос выбора. Убедитесь, что вы только отменили регистрацию пакетов у пользователя db. Если что-то не слишком мрачно, после отмены регистрации нескольких пакетов, ghc-pkg check сообщит больше о сломанных пакетах.
Если, с другой стороны, большая часть пакетов сломана, вероятно, будет проще полностью стереть пользователя db, $ rm -rf ~/.ghc/ghc-version/package.conf.d или эквивалент на других ОС.

В любом случае у вас будут потерянные пакеты, которые вы все еще хотите использовать, поэтому вы попытаетесь переустановить их, не нарушая ничего заново. Run

$ cabal install world --dry-run

который попытается создать последовательный план установки для всех пакетов, которые вы установили с помощью cabal-install. Если это не удастся, оно будет распечатывать причины, тогда вы сможете исправить проблемы, добавив ограничения на пакеты, перечисленные в мировом файле (~/.cabal/world), например, хотя у меня нет сломанных пакетов ( в соответствии с ghc/ghc-pkg), cabal install world --dry-run сказал, что не может настроить vector-algorithms-0.5.2, который зависит от vector >= 0.6 && < 0.8 (у меня установлен vector-0.7.1). Причина в том, что hmatrix-0.12.0.1 требует vector >= 0.8. Замена ограничения -any "на hmatrix на" < 0,12 "в мировом файле создала чистый установочный план.
Итак, после небольшого перебора ограничений в мировом файле вы получите план установки из cabal. Проверьте, будет ли переустанавливаться какой-либо пакет, который у вас уже есть (установка более новой версии, вероятно, в порядке, переустановка той же версии означает проблему). Если вы довольны инсталляционным планом cabal, cabal install world и brew хорошим горшком чая, а GHC занят. Запустите ghc-pkg check еще раз, чтобы убедиться, что все в порядке.

Кусок обычно хорошего совета: если вы не знаете, что подразумевает установка пакета, всегда используйте сначала -dry-run.

Если вы нарушили глобальную базу данных пакетов, выполнив глобальные установки с помощью cabal, стратегия незарегистрированных правонарушителей может работать, но она также может безвозвратно разорвать ваш ghc, что зависит от того, что нарушено. Если вы нарушили глобальный db, установив пакеты из своего дистрибутива ОС, установите новый GHC, проклинайте дистрибутивные пакеты и попытайтесь помочь им предотвратить дальнейшие такие события.

Команда

A cabal repair будет очень приятной, но пока что исправление сломанной настройки, к сожалению, намного больше работает.

Ответ 2

В течение некоторого времени я полагался на этот ghc-pkg-clean script. Он удаляет все сломанные пакеты, и я переустанавливаю их по мере необходимости. Для более серьезного поломки я использую ghc-pkg- reset script.

Сегодня, однако, я нашел ghc-pkg-autofix, что автоматизирует это далее - сломанные пакеты становятся несломанными. Я не знаю, что он делает, YMMV.