загадочные проблемы с установкой Cabal
-
30-09-2019 - |
Вопрос
С чистой установкой «Платформы Haskell».(OS X Snow-Leopard & Platform 2010.1.0.1), выполнение этой операции приводит к очень странным последствиям простой последовательности. cabal install
поведение:
$ cabal install time
$ cabal install random
$ ghc-pkg list random
/Library/Frameworks/GHC.framework/Versions/612/usr/lib/ghc-6.12.1/package.conf.d
random-1.0.0.2
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d
random-1.0.0.2
random-1.0.0.2
установлен дважды в моей системе.и сейчас делаю cabal install random
переустанавливает random-1.0.0.2
каждый раз.
Выглядит как random
зависит от time
, и клика хочет переустановить его после выхода новой версии time
доступный?И из-за двух random-1.0.0.2
клика в замешательстве и всегда думает, что она не в курсе, потому что смотрит на первую?
ghc-pkg check
не находит ошибок.
Решение 3
Я опишу работу, которая работала так далеко для меня. Я пробовал много разных вещей, но я описал только здесь попытку, которая работала.
(BTW: я использую Mac OS X 10.6.4, и ваши результаты могут отличаться в разных системах)
- Я установил GHC 6.12.3 из источника. Не удаляйте свой предыдущий GHC, так как Building GHC не требует этого.
- Я удалил симличину в
/usr/bin
(дляghc
,ghci
,ghc-pkg
, а такжеrunhaskell
) к моему предыдущему GHC, который был единственным из платформы Haskell 2010.1.0.1. - Я установил
cabal-install
используя этоbootstrap.sh
скрипт - Я установил исправленные версии
random
а такжеhaskell98
пакеты. Различия просто в их.cabal
файлы- надоедливый
random
версия до1.0.0.2.1
и изменил его зависимость наtime
бытьtime == 1.1.*
- надоедливый
haskell98
версии до1.0.1.1.1
вот и все
- надоедливый
- Я побежал
cabal update
а такжеcabal upgrade
чтобы увидеть, какие пакеты устарели. я сделалcabal install
те. Я считаю, что это помогает достичь устойчивого государства быстрее. (Обратите внимание, чтоsyb
Установка не удалась и чтоcabal install parsec
сказал, что с этим нечего делать, когдаcabal upgrade
сказал по-другому. Так что я оставил эти два пакета в одиночку)
Я подтвердил, что моя настройка в порядке, запустив ghc-pkg check
между этапами. Иногда он разрывается, потому что пакет переустанавливается через предыдущую версию с тем же номером версии и пакетами, которые зависели от него необходимо переустановить. Когда это происходит я cabal install
Сломанные пакеты снова.
Я также использовал следующую программу, чтобы убедиться, что моя настройка не содержит двух пакетов с той же версией:
import Data.List (sort)
import Data.Maybe (fromJust)
import System.IO (hGetContents)
import System.Process (CreateProcess (std_out), StdStream (CreatePipe), createProcess, shell)
main :: IO ()
main = do
pkgListRaw <-
createProcess (shell "ghc-pkg list") { std_out = CreatePipe }
>>= hGetContents . fromJust . sndOfFourTup
let pkgListSorted = sort . filter (not . null) $ lines pkgListRaw
putStrLn .
unlines . map (dropWhile (== ' ') . fst) .
filter (uncurry (==)) . zip pkgListSorted $ tail pkgListSorted
where
sndOfFourTup (_, x, _, _) = x
я
cabal install
редhlint
,yesod
,haddock
,HDBC-mysql
,hakyll
и другие пакеты, а затем яcabal install
Ed предыдущий список снова и снова, пока моя настройка не достигла «стабильного состояния», в которомcabal install
не переустанавливает ни одного из них.Я проверил, что мои собственные программы я работаю сейчас, компилируйте и работаю. Все, кажется, хорошо сейчас
Примечания:
- Я не мог получить платформу Haskell 2010.1.0.1 на работу. Вещи работали только для меня после того, как я улучшился до GHC 6.12.3. По иронии судьбы (?), Это касается рекомендации на странице загрузки GHC:
Останавливаться!
Для большинства пользователей мы рекомендуем устанавливать платформу Haskell вместо GHC. Текущий выпуск платформы Haskell включает в себя недавний релиз GHC, а также некоторые другие инструменты (такие как Cabal), а также больший набор библиотек, которые, как известно, работают вместе.
Эта работа - вокруг, вероятно, прорвется как в будущем. Я думаю, что это, вероятно, произойдет через несколько месяцев. Основная библиотека, как
random
будет обновляться, а затем проблемы зависимости начнут разгадать снова. Тогда я / вам придется провести время на получение наших установок. Возможно, тогда это потребует обновления до более нового GHC. Но кто знает, может быть, тогда будет более старый релиз, который станет стабильным, поскольку пакеты Hackage обновляются для решения проблем связанных с зависимостью. Как вам услугу, я буду обновлять этот вопрос и ответ, когда придет время. (Предполагая, что другие тоже имеют эту проблему. До сих пор я проверил, что Саймон Марлоу и Пик также сталкиваются с этой проблемой)Способы узнать, что ваша настройка Haskell сломана (если кто-то из них правда, то настройка сломана):
- Ничего не работает
ghc-pkg check
говорит, что это сломано- Краткая программа, источник которого я вложил в этот ответ выше, обнаруживает, что у вас есть пакет, установленный дважды с той же версией
cabal update
а затем циклcabal install
Список пакетов, которые я писал выше, или другой список (предпочтительно большой с большим количеством зависимостей). Если вы никогда не достигаете стабильного состояния (итерация цикла всегда что-то переноса), то ваша настройка сломана. ПРЕДУПРЕЖДЕНИЕ: Этот шаг может разрушить вашу функционирующую настроек HASKELL. Делайте это, если вы Maso-любопытный или готов исправить вашу настройку после того, как он разрывается (процесс, который может быть трудоемким)
Я хотел бы знать, нарушены ли ваши настройки или работают. Это может помочь мне. Например, если мы обнаружим, что настройки GHC 6.10 работают нормально, я / ты мог бы порекомендовать эти настройки людям по случаю рекомендации кому-то, чтобы попробовать Haskell и т. Д.
Я надеюсь, что это помогает другим лицом к тому же или подобным проблемам. Большое спасибо Саймону Марлоу и Джону!
Другие советы
Пожалуйста, сделай
ghc-pkg check
И если это не показывает ошибок, давайте посмотрим на вывод из
ghc-pkg list -v
а также
cabal install random -v
Редактировать: Я могу воспроизвести вашу проблему с GHC 6.12.1, но не с 6.12.2, используя ровно одинаковую версию Cabal-install (0.8.0). Я посмотрю в это.
Редактировать 2: сообщается как ошибка в Cabal-install.
У меня есть два возможных решения, оба из которых несколько опасны, но помогут вам получить работающую установку.Я рад, что Саймон следит за этим, потому что мне это кажется какой-то ошибкой.Чтобы получить работающую установку, я бы сначала попробовал следующее:
ghc-pkg unregister random
затем выполните случайный список ghc-pkg, чтобы увидеть, что установлено.Я предполагаю (но не уверен), что у вас все еще будет версия /Library/Frameworks (из Платформы), но недавно установленная версия исчезнет.Если это так, перейдите к следующему шагу.Если это не так, вам, вероятно, придется выполнить чистую переустановку платформы.
Предполагая, что случайная платформа все еще присутствует, сделайте следующее:
cabal unpack random
перейдите в каталог, в который он распакован, и отредактируйте файл .cabal, увеличив версию до 1.0.0.2.1 (добавьте еще одно поле и увеличьте его на единицу).Затем установите Cabal из этого каталога, и он должен установить новый случайный файл.Поскольку у него другая версия, чем у платформы Random, они могут безопасно сосуществовать.
Вместо отмены регистрации ghc-pkg вы можете напрямую удалить файл регистрации из
/Users/yairc/.ghc/i386-darwin-6.12.1/package.conf.d
к имени файла будет добавлен хэш, поэтому вам нужно будет просмотреть содержимое каталога, чтобы получить значение.Просто удалите файл, и с этого момента ghc-pkg и cabal его не увидят.Это не затронет установку платформы (поэтому в этом смысле это безопаснее), но все еще существует вероятность того, что другие установленные пакеты будут затронуты.После этого вы можете переустановить случайный пакет, распаковав и увеличив версию, как указано выше.