Использование списка ghc-pkg и списка cabal - при установке дают разные списки
Я пытаюсь загрузить мой файл.hs, но когда я import Data.Numbers.CReal
, это дает мне ошибку Failed to load interface for 'Data.Numbers.CReal'
, Я побежал cabal install numbers
и если я cabal list --installed
номер pkg появляется, но если я ghc-pkg list
это не (также если я ghc-pkg check
это дает много предупреждений о пикше). Это связано с моим не загружаемым файлом? Как я могу решить это?
Ps. Я знаю, как импортировать пакеты, но я не уверен, правильно ли я импортирую эти пакеты.
Спасибо и извините, если я не объяснил себя правильно.
2 ответа
На ум приходят две гипотезы:
cabal
выбирает другую версиюghc
и его обслуживающий инструментарий, чем ваша оболочка. Вы можете проверить это несоответствие, выполнив эти две команды:cabal exec -- ghc --version ghc --version
Они говорят то же самое? Если это так, отвергнуть эту гипотезу. В противном случае вам следует решить, нравится ли вам выбор оболочки или выбор клики (я рекомендую предпочесть выбор вашей оболочки).
Если хочешь
cabal
Выбор лучше, вы можете использовать конкретную версию GHC (и другие инструменты GHC), добавив-<version>
в команду; например, попробуйтеghc-pkg-7.10.3 list
чтобы увидеть, что находится в базе данных пакета для версии 7.10.3, илиghci-7.10.3
запустить конкретную версию REPL. Вы можете сделать эти изменения постоянными, добавив символические ссылки или аналогичные вашимPATH
,Если вам больше нравится выбор вашей оболочки, вы можете спросить
cabal
использовать эту версию сcabal configure -w ghc
; или если вы беспокоитесь, чтоcabal
и ваша оболочка разрешитсяghc
иначе, вы могли бы попросить конкретную версию сcabal configure -w ghc-7.10.3
или похожие.Ваша оболочка согласна с
cabal
о том, какую версию GHC использовать, но вы находитесь в песочнице клики.cabal list --installed
говорит вам, что установлено в песочнице, ноghc-pkg list
рассказывает, что установлено в вашей базе данных пользовательских пакетов. Вы можете проверить наличие расхождений между этими двумя командами:cabal exec -- ghc-pkg list numbers ghc-pkg list numbers
(Если у вас новичок, не знаю, в какой версии он появился, вы также можете попробовать
cabal hc-pkg list
вместоcabal exec -- ghc-pkg list
, Это, вероятно, будет более совместимым способом, поэтому хорошая привычка для развития.)Если они печатают одни и те же вещи, отвергните эту гипотезу. В противном случае вы должны решить, хотите ли вы продолжать использовать песочницу или нет (я рекомендую продолжать использовать песочницу).
Если вы хотите прекратить использование песочницы, вы можете передать
--ignore-sandbox
вcabal
, Чтобы сделать это постоянным, посмотрите вcabal.sandbox.config
файл, который будет содержать указатель на настоящую песочницу (обычно.cabal.sandbox
). Удалите как конфиг, так и песочницу. Вы также можете глобально игнорировать песочницы, добавивignore-sandbox: True
на ваш~/.cabal/config
, но я настоятельно рекомендую против этого.Если вы хотите сохранить песочницу, вам нужно будет использовать
cabal exec
для всех ваших инструментов GHC необходимо убедиться, что выбрана правильная база данных пакетов. Например, попробуйтеcabal exec ghci
запустить REPL с доступом к базе данных пакета песочницы.
Эти гипотезы не являются взаимоисключающими: могут произойти оба. В этом случае я настоятельно рекомендую выбрать окончательное решение ("использовать cabal exec
для всех исполнений GHC toolsuite "), поскольку он прозрачно решает обе проблемы: стандартные команды GHC toolsuite будут переписаны для ссылки на явно версионные (например, cabal exec ghc
будет на самом деле выполнить ghc-7.10.3
) и среда будет настроена так, чтобы указывать на правильную базу данных пакетов.
Ответ на это
Вы можете проверить это несоответствие, выполнив эти две команды:
Кабал Exec - GHC - версия GHC - версия
Они говорят то же самое?
было да. Я не помню второй вариант, но мне удалось решить его самостоятельно. Что конкретно я сделал:
- выполните команду "rm -rf .cabal" (без запятых), чтобы удалить конфигурацию cabal.
- запустите "rm -rf .cabal-sandbox"
- запустить "rm -rf .ghc"
- Кабал новоиспеченный Кабал (не уверен, помогло это или нет)
- В режиме администратора (sudo) я отредактировал конфигурационный файл cabal и изменил Ignore Sandbox на True -> это вызовет у меня проблемы в будущем? я должен изменить его обратно на ложь? ответьте, пожалуйста
- Пришлось удалить cabal.sandbox.config, который доставлял некоторые проблемы
- Кабал установить Кабал установить
- Кабала обновление
Теперь команда ghc-pkg list и список cabal --installed показывают оба мои установленные пакеты, и они работают без проблем.
Ps. Я дал подробную информацию о процессе на случай, если кому-то понадобится в будущем. Все еще не уверен, что послужило причиной того, что клика и ghc не показали одинаковые pkgs.