مشاكل التثبيت الغامضة
-
30-09-2019 - |
سؤال
مع تثبيت نظيف لـ "منصة هاسكل". (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 منذ ذلك الحين. لن يلمس هذا تثبيت النظام الأساسي (بحيث يكون أكثر أمانًا بهذا المعنى) ، لكن الإمكانات لا تزال موجودة لخرطوم الحزم المثبتة الأخرى. بعد ذلك ، يمكنك إعادة تثبيت الحزمة العشوائية عن طريق تفريغ وزيادة الإصدار على النحو الوارد أعلاه.