سؤال

مع تثبيت نظيف لـ "منصة هاسكل". (OS X Snow-Leopard & Platfor 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

سأصف العمل الذي عمل حتى الآن بالنسبة لي. لقد جربت العديد من الأشياء المختلفة ، لكنني سأصف هنا فقط المحاولة التي نجحت.

(راجع للشغل: أنا أستخدم 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
  • أنا cabal installإد hlint, yesod, haddock, HDBC-mysql, hakyll وحزم أخرى ثم أنا cabal installإد القائمة السابقة مرارًا وتكرارًا حتى وصل الإعداد إلى "حالة مستقرة" فيها cabal install لا يعيد تثبيت أي من هؤلاء.

  • لقد تحقق من أن برامجي الخاصة التي أعمل عليها الآن تجمع وأعمل. يبدو أن كل شيء على ما يرام الآن

ملحوظات:

  • لم أستطع الحصول على منصة Haskell 2010.1.0.1 للعمل. عملت الأمور فقط بالنسبة لي بعد ترقيتي إلى GHC 6.12.3. ومن المفارقات (؟) ، هذا يتعارض مع التوصية على صفحة تنزيل GHC:

قف!

بالنسبة لمعظم المستخدمين ، نوصي بتثبيت منصة Haskell بدلاً من GHC. يتضمن إصدار منصة Haskell الحالي إصدارًا حديثًا لـ GHC بالإضافة إلى بعض الأدوات الأخرى (مثل Cabal) ، ومجموعة أكبر من المكتبات المعروفة بأنها تعمل معًا.

  • من المحتمل أن ينكسر هذا العمل في وقت ما في المستقبل أيضًا. أعتقد أن هذا سيحدث على الأرجح في غضون بضعة أشهر. مكتبة أساسية مثل random سيتم تحديثها ثم ستبدأ مشاكل التبعية في الانهيار مرة أخرى. ثم سأضطر إلى قضاء بعض الوقت في إصلاح الإعدادات الخاصة بنا. ربما يتطلب ذلك الترقية إلى GHC الأحدث. ولكن من يدري ، ربما يكون ذلك إصدارًا قديمًا سيصبح مستقرًا حيث يتم تحديث حزم المتسللين لحل المشكلات المتعلقة بالاعتماد. كخدمة لك ، سأقوم بتحديث هذا السؤال والإجابة عندما يحين الوقت. (على افتراض أن الآخرين يواجهون هذه المشكلة أيضًا. حتى الآن ، تحقق من صحة أن سيمون مارلو و Peaker يواجهون هذه المشكلة أيضًا)

  • طرق لمعرفة أن إعداد Haskell الخاص بك مكسور (إذا كان أي منها صحيحًا ، فسيكون الإعداد مكسورًا):

    • لا شيء يعمل
    • ghc-pkg check يقول أنه مكسور
    • يجد البرنامج القصير الذي وضعته في هذا الإجابة أعلاه أن لديك حزمة مثبتة مرتين مع نفس الإصدار بالضبط
    • cabal update ثم دورة cabal installجي قائمة الحزم التي كتبت أعلاه ، أو قائمة أخرى (ويفضل أن تكون قائمة كبيرة مع الكثير من التبعيات). إذا لم تصل أبدًا إلى حالة مستقرة (تكرار الدورة دائمًا ما يعيد تثبيت شيء ما) ، فسيكون إعدادك مكسورًا. تحذير: قد تدمر هذه الخطوة إعداد Haskell الذي يعمل حاليًا. افعل ذلك إذا كنت متحركًا في الماسو أو على استعداد لإصلاح الإعداد الخاص بك بعد كسره (عملية قد تستغرق وقتًا طويلاً)
  • أود أن أعرف ما إذا كانت إعداداتك مكسورة أو تعمل. هذا يمكن أن يساعدني. على سبيل المثال ، إذا وجدنا أن إعدادات GHC 6.10 تعمل بشكل جيد ، فقد أوصي I/U بتلك الإعدادات للأشخاص بمناسبة التوصية لشخص ما بتجربة Haskell وما إلى ذلك.

آمل أن يساعد هذا الآخرين في مواجهة نفس المشكلات أو المشابهة. شكرا جزيلا لسيمون مارلو وجون!

نصائح أخرى

افعل من فضلك

ghc-pkg check

وإذا لم يظهر ذلك أي أخطاء ، فلنرى الإخراج من

ghc-pkg list -v

و

cabal install random -v

يحرر: يمكنني إعادة إنتاج مشكلتك مع GHC 6.12.1 ، ولكن ليس مع 6.12.2 ، باستخدام نفس الإصدار بالضبط من التثبيت (0.8.0). سانظر بداخلها.

تحرير 2: تم الإبلاغ عنها كخشب في التثبيت.

لديّ حلين محتملين ، وكلاهما خطير إلى حد ما ولكن يجب أن يحصل على تركيب عمل. أنا سعيد لسيمون يتبع هذا لأنه يبدو وكأنه نوع من الأخطاء بالنسبة لي. للحصول على تثبيت عمل ، سأحاول ما يلي أولاً:

ghc-pkg unregister random

ثم قم بإدراج GHC-PKG عشوائيًا لمعرفة ما تم تثبيته. أعتقد (لكنني لست متأكدًا) من أنه لا يزال لديك إصدار /Library /Frameworks (من النظام الأساسي) ولكن سيتم اختفاء الإصدار المثبت حديثًا. إذا كان هذا هو الحال ، فانتقل إلى الخطوة التالية. إذا لم يكن الأمر كذلك ، فربما تحتاج إلى إجراء إعادة تثبيت نظيفة للمنصة.

على افتراض أن المنصة العشوائية لا تزال موجودة ، افعل ذلك:

cabal unpack random

قرص مضغوط للدليل يتم تفريغه في ملف .cabal عن طريق اصطياد الإصدار إلى 1.0.0.2.1 (أضف حقلًا آخر وقم بزيادةه بمقدار واحد). ثم تثبيت كابال من هذا الدليل ويجب تثبيت العشوائية الجديدة. نظرًا لأن هذا يحتوي على إصدار مختلف عن النظام الأساسي العشوائي ، يمكن للثاني التعايش بأمان.

بدلاً من القيام بـ GHC-PKG UNGISTER ، يمكنك حذف ملف التسجيل مباشرة من

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

سيكون اسم الملف هو تجزئة له ، لذلك ستحتاج إلى إلقاء نظرة على محتويات الدليل للحصول على القيمة فعليًا. ما عليك سوى حذف الملف ويجب ألا يراها GHC-PKG و Cabal منذ ذلك الحين. لن يلمس هذا تثبيت النظام الأساسي (بحيث يكون أكثر أمانًا بهذا المعنى) ، لكن الإمكانات لا تزال موجودة لخرطوم الحزم المثبتة الأخرى. بعد ذلك ، يمكنك إعادة تثبيت الحزمة العشوائية عن طريق تفريغ وزيادة الإصدار على النحو الوارد أعلاه.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top