كابال لا يقوم بتثبيت التبعيات عند الحاجة إلى مكتبات التوصيف؟

StackOverflow https://stackoverflow.com/questions/1704421

  •  19-09-2019
  •  | 
  •  

سؤال

أريد أن تجميع برنامجي مع التنميط، لذلك أركض:

$ cabal configure --enable-executable-profiling
...
$ cabal build
...
    Could not find module 'Graphics.UI.GLUT':
      Perhaps you havent installed the profiling libraries for package 'GLUT-2.2.2.0'?
...
$ # indeed I have not installed the prof libs for GLUT, so..
$ cabal install -p GLUT --reinstall
...
    Could not find module 'Graphics.Rendering.OpenGL':
      Perhaps you havent installed the profiling libraries for package 'OpenGL-2.4.0.1'?
...

لذلك، المشكلة هي أنه على عكس سلوك الترحيب المعتاد في Cabal، لا يحل Cabal التبعيات وتثبيتها عند حاجة إلى مكتبات التنميط.

يمكنني العمل من حوله عن طريق حل التبعيات يدويا (باتباع الأخطاء التي تظهر بعد فترة من الوقت):

$ cabal install -p OpenGLRaw --reinstall
$ cabal install -p StateVar --reinstall
$ cabal install -p Tensor --reinstall
$ cabal install -p ObjectName --reinstall
$ cabal install -p GLURaw --reinstall
$ cabal install -p OpenGL --reinstall
$ cabal install -p GLUT --reinstall

ثم كرر التبعية التالية ..

هل هناك طريقة أفضل للقيام بذلك؟ أي جعل كابال تفعل العمل بمفرده كما يفعل للمكتبات العادية؟

هل كانت مفيدة؟

المحلول

لقد مكنت library-profiling: True في ~/.cabal/config ملف. من ذلك الحين، ستقوم أي منشآت جديدة تلقائيا بتمكين التنميط.

لسوء الحظ، لا تزال تعني أنه اضطررت إلى إعادة تثبيت الحزم القديمة يدويا بالفعل. على الرغم من، بعد فترة من القيام بذلك يدويا، أنا الآن لديك معظم الحزم إعادة تثبيتها مع تمكين التنميط ...

نصائح أخرى

من تعليق توم لوكورست:

آمل أن يأتي شخص ما إلى جنبا إلى جنب مع إجابة أفضل، واحدة لا تتطلب مني إعادة تثبيت منصة Haskell كاملة يدويا في المرة القادمة.

للزوار في المستقبل:

أصبحت مهمة تثبيت إصدارات التنميط من جميع المكتبات المثبتة أقل من Chore، cabal (cabal-install) تتبع الآن ما تم تثبيته باستخدامه في world ملف في .cabal الدليل (على لينكس، سيكون ذلك $HOME/.cabal, ، على ويندوز شيء مثل C:\Users\%YOU%\AppData\Roaming\cabal\, ، على OSX ؟؟).

لذلك بعد تمكين التنميط في config ملف (في نفس الدليل)، وإزالة قاعدة بيانات حزمة GHC (يمكنك العثور على مواقع DB العالمية والمستخدم لكل ghc-pkg list nonexisting; ؛ قم بإزالة الحزم المثبتة في Cabal من قاعدة البيانات العالمية ghc-pkg unregister packagename إذا كان لديك أي أو إعادة تسمية أو حذف المستخدم بأكمله DB - هذا ضروري لأن world يتتبع الملف فقط الحزم المثبتة بشكل صريح، وليس تبعياتها)، في تثبيت كل شيء مع دعم التنميط يجب أن تعمل على النحو التالي:

$ cabal install --reinstall world --dry-run

الجري أولا مع --dry-run للتحقق من وجود مشاكل قبل إعادة تثبيت أي شيء. إذا كان سيتم إعادة تثبيت حزم التمهيد مثل process أو directory, هذه علامة سيئة، إذا كنت لا تعرف كيفية التعامل معها، اسأل عن #haskell قناة IRC، واحدة من القوائم البريدية، أو هنا للحصول على إرشادات. إذا فشل في العثور على خطة تثبيت ثابتة بسبب الإصدارات الجديدة قراصنة من بعض الحزم التي لا تتفق مع بعضها البعض، والتي يمكن حلها عادة عن طريق تحرير world ملف وقيادة الإصدارات المسموح بها من بعض الحزم.

ثم، إذا كنت متفائلا أن لا شيء سوف يكسر بشكل سيء،

$ cabal install --reinstall world

ولديك وعاء لطيف من الشاي بينما GGC مشغول تجميع.

يبدو إجابة دانيال فيشر جيدة، ولكن لسبب ما مكتبة ~ / .cabal / world موجودة فقط إدخالات للمكتبات المثبتة مباشرة، وليس تبعياتها.

بدلا من ذلك، قمت بإلقاء قائمة بجميع المكتبات المثبتة باستخدام

$ ghc-pkg list > list

هذا يسرد المكتبات المثبتة على مستوى النظام ومحليا. لذلك، قمت بتحرير list ملف لإزالة الجزء الأول (يحتوي على المكتبات المثبتة على نطاق النظام) ترك الخطوط فقط بعد /home/<user>/.ghc/.... وبعد أخيرا، ركضت

$ cabal install --reinstall $(cat list) 

هذا عملت بالنسبة لي. يجب أن تفعل ربما --dry-run أول. ثم اذهب جعل وعاء من الشاي. أو خبز كعكة.

للزوار 2016+: مجرد تثبيت ghc-prof

أنظمة ديبيان لينكس:

sudo apt-get install ghc-prof

أنظمة Linux Arch:

sudo pacman -S ghc-prof

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