таинственные проблемы с установкой кабинета - PullRequest
9 голосов
/ 25 июня 2010

С чистой установкой "Haskell Platform". (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, и cabal хочет переустановить его после того, как появится новая версия time? И из-за двух random-1.0.0.2 клика смущена и всегда думает, что она не актуальна, потому что смотрит на первую?

ghc-pkg check не находит ошибок.

Ответы [ 3 ]

6 голосов
/ 25 июня 2010

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

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.

2 голосов
/ 26 июня 2010

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

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

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

Примечания:

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

Stop!

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

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

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

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

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

2 голосов
/ 26 июня 2010

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

ghc-pkg unregister random

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

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

cabal unpack random

cd в каталог, в котором онараспакуйте в и отредактируйте файл .cabal, повысив версию до 1.0.0.2.1 (добавьте другое поле и увеличьте его на единицу).Затем установите Cabal из этого каталога, и он должен установить новый файл random.Поскольку версия отличается от случайной платформы, они могут безопасно сосуществовать.

Вместо отмены регистрации ghc-pkg вы можете напрямую удалить файл регистрации из

/ Users / yairc / .ghc / i386-darwin-6.12.1 / package.conf.d

к имени файла будет добавлен хеш, поэтому вам нужно посмотреть насодержимое каталога, чтобы получить значение.Просто удалите файл, и ghc-pkg и cabal не должны его видеть с этого момента.Это не повлияет на установку платформы (так что в этом смысле это безопаснее), но есть потенциал для подключения других установленных пакетов.После этого вы можете переустановить случайный пакет, распаковав и увеличив версию, как указано выше.

...