таинственные проблемы установки интриги

С чистой установкой "Платформы 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 не находит ошибок.

9
задан yairchu 30 June 2010 в 22:29
поделиться

3 ответа

Я опишу обходной путь, который до сих пор работал у меня. Я пробовал много разных вещей, но здесь я описал только ту попытку, которая сработала.

(кстати: я использую Mac OS X 10.6.4, и ваши результаты могут отличаться в разных системах)

  • Я установил GHC 6.12.3 из исходников. Не удаляйте предыдущий GHC, поскольку этого требует создание GHC.
  • Я удалил символические ссылки в / usr / bin (для ghc , ghci , ghc-pkg и runhaskell ) в мой предыдущий GHC, который был из установщика Haskell Platform 2010.1.0.1.
  • Я установил cabal-install , используя его сценарий bootstrap.sh .
  • Я установил исправленные версии пакетов random и haskell98 . Отличия только в их файлах .cabal .
    • увеличил версию random до 1.0.0.2.1 и изменил ее зависимость от времени на time == 1.1. *
    • поднял версии haskell98 до 1.0.1.1.1 , и все
  • Я запустил cabal update и cabal upgrade , чтобы узнать, какие пакеты устарели.Я сделал Кабал установил тех. Я считаю, что это помогает быстрее достичь стабильного состояния. (обратите внимание, что установка syb не удалась, и что cabal install parsec сказал, что с этим ничего не поделать, когда cabal upgrade сказал иначе. Поэтому я оставил эти два пакета в одиночку)

Я подтвердил, что моя установка в порядке, выполнив ghc-pkg check между этапами. Иногда он выходит из строя, потому что пакет переустанавливается поверх предыдущей версии с тем же номером версии, и пакеты, которые от него зависят, необходимо переустановить. Когда это происходит, я клик устанавливаю сломанные пакеты снова.

Я также использовал следующую программу, чтобы убедиться, что моя установка не содержит двух пакетов с одинаковой версией:

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
  • I cabal install ed hlint , yesod , hasdock , HDBC-mysql , hakyll и другие пакеты, а затем я cabal install снова и снова редактировал предыдущий список пока моя установка не достигла «стабильного состояния», в котором cabal install не переустанавливает ни один из них.

  • Я проверил, что мои собственные программы, над которыми я сейчас работаю, компилируются и работают. Кажется, теперь все в порядке

Примечания:

  • Мне не удалось заставить Haskell Platform 2010.1.0.1 работать. У меня все заработало только после того, как я обновился до GHC 6.12.3. По иронии судьбы (?), Это противоречит рекомендации на странице загрузки GHC:

Стоп!

Для большинства пользователей мы рекомендуем установить платформу Haskell вместо GHC.Текущий выпуск Haskell Platform включает недавний выпуск GHC, а также некоторые другие инструменты (например, cabal) и более широкий набор библиотек, которые, как известно, работают вместе.

  • Этот обходной путь, вероятно, тоже когда-нибудь сломается. Думаю, что это, наверное, произойдет через несколько месяцев. Базовая библиотека, такая как random , будет обновлена, а затем снова начнут обнаруживаться проблемы с зависимостями. Тогда мне / вам придется потратить время на то, чтобы исправить наши настройки. Возможно, тогда потребуется обновление до более нового GHC. Но кто знает, может быть, это будет более старая версия, которая станет стабильной по мере обновления пакетов взлома для решения проблем, связанных с зависимостями. В качестве услуги я обновлю этот вопрос и отвечу, когда придет время. (Предполагая, что у других тоже есть эта проблема. Пока я подтвердил, что Саймон Марлоу и Пикер тоже сталкиваются с этой проблемой)

  • Способы узнать, что ваша установка Haskell не работает (если что-то из этого верно, то установка нарушена):

    • Ничего не работает
    • Проверка ghc-pkg говорит, что она не работает
    • Короткая программа, исходный текст которой я вложил в ответ выше, обнаруживает, что у вас дважды установлен пакет с одной и той же версией
    • cabal update , а затем цикл cabal install со списком пакетов, который я написал выше, или другим списком (желательно большим с множеством зависимостей). Если вы никогда не достигнете стабильного состояния (итерация цикла всегда что-то переустанавливает), то ваша установка нарушена. ПРЕДУПРЕЖДЕНИЕ : этот шаг может разрушить вашу текущую работающую установку Haskell.Сделайте это, если вам очень любопытно или вы хотите исправить свою настройку после того, как она сломается (процесс, который может занять много времени)
  • Я хотел бы знать, сломаны ли ваши настройки или работают. Это могло мне помочь. Например, если мы обнаружим, что настройки GHC 6.10 работают нормально,Я / пользователь мог бы порекомендовать эти установки людям по случаю порекомендовать кому-то попробовать Haskell и т. Д.

Я надеюсь, что это поможет другим, сталкивающимся с такими же или подобными проблемами. Большое спасибо Саймону Марлоу и Джону!

2
ответ дан 4 December 2019 в 21:07
поделиться

Пожалуйста, сделайте

ghc-pkg check

, и если это не покажет ошибок, давайте посмотрим на вывод

ghc-pkg list -v

и

cabal install random -v

Edit : Я могу воспроизвести вашу проблему с GHC 6.12.1, но не с 6.12.2, используя ту же версию cabal-install (0.8.0). Я разберусь с этим.

Правка 2 : сообщается как ошибка в cabal-install.

6
ответ дан 4 December 2019 в 21:07
поделиться

У меня есть два возможных решения, оба в некоторой степени опасны, но должны дать вам работающую установку. Я рад, что Саймон следит за этим, потому что для меня это звучит как какая-то ошибка. Чтобы получить работающую установку, я бы сначала попробовал следующее:

ghc-pkg unregister random

затем произвольно произвел список ghc-pkg, чтобы увидеть, что установлено. Я предполагаю (но я не уверен), что у вас все еще будет версия / Library / Frameworks (из платформы), но недавно установленная версия исчезнет. В этом случае переходите к следующему шагу. В противном случае вам, вероятно, потребуется выполнить чистую переустановку платформы.

Предполагая, что платформа random все еще присутствует, сделайте следующее:

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 его не увидят. Это не повлияет на установку платформы (так что в этом смысле это безопаснее), но все еще есть потенциал для распространения других установленных пакетов. После этого вы можете переустановить случайный пакет, распаковав и увеличив версию, как указано выше.

2
ответ дан 4 December 2019 в 21:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: