2012-01-10 15 views
5

पैकेज मैडिंग स्थापित करते समय मुझे cabal का व्यवहार मिलता है। उदाहरण के लिए,"कैबल इंस्टॉल ___" पहले स्थापित पैकेज तोड़ता है

cabal install funsat 

array की स्थापित पुराने संस्करणों, time, random, quickcheck, और bitset चल रहा है,, monadiccp तरह संकुल तोड़ने hoogle, heist, snap, आदि

यह वापस आ गया और cabal install monadiccp जाना काम करता है , आदि, लेकिन मैं स्थापित कैबल तोड़ने के संकुल के डिफ़ॉल्ट व्यवहार से कैसे बच सकता हूं? कोई भी उचित लिनक्स पैकेज मैनेजर, जैसे aptitude या zypper पूछता है कि क्या मैं एक नया पैकेज स्थापित करते समय पहले से ही स्थापित पैकेज तोड़ना चाहता था।

क्या कोई ने वर्कअराउंड स्क्रिप्ट पकाया है? अग्रिम में धन्यवाद।

+1

http://ivanmiljenovic.wordpress.com/2010/03/15/repeat-after-me-cabal-is-not-a-package-manager/ –

+0

@ MatveyB.Aksenov, मैं क्या उस पृष्ठ से मिला था (ए) कैबल/= कैबल-इंस्टाल, मुझे पहले से पता था लेकिन बहुत ज्यादा परवाह नहीं है (बी) सिस्टम पैकेज मैनेजर (सी) का उपयोग करें यदि आपके पास सिस्टम पैकेज नहीं हैं, तो gentoo पर स्विच करें। (सी) दुर्भाग्यवश, मेरे लिए वास्तव में एक विकल्प नहीं है। – gatoatigrado

उत्तर

8

मैं cabal-dev की अनुशंसा करता हूं, जो आपके द्वारा काम की जाने वाली प्रत्येक परियोजना के लिए स्थापित संकुलों का एक अलग सेट बनाए रखता है। यह सामान्य रूप से कैबल-इंस्टॉलेशन के खराब व्यवहार को हल नहीं करता है, लेकिन इसका मतलब है कि ऐसी विफलताओं अन्यथा अलग होने की तुलना में अधिक अलग हैं, और आपको cabal-dev clean && cabal-dev install करके आसानी से उन्हें ठीक करने की अनुमति देता है।

पुनरुत्पादित निर्माण का अतिरिक्त लाभ भी अच्छा है।

मान्य है, यह आपकी विशिष्ट समस्या के लिए एक समाधान नहीं है, लेकिन यह सामान्य रूप से कैबल-इंस्टॉल दर्द को कम करता है।


डैनियल फिशर के जवाब पर बिल्डिंग, यहाँ है कि एक अधिष्ठापन aborts अगर यह एक पैकेज को पुनर्स्थापित हैं cabal के लिए एक आवरण है:

cabal() { 
    if [ "$1" = "install" ]; then 
    local out=$(command cabal --dry-run -v2 "[email protected]" 2>&1) 
    if echo "$out" | egrep -c '\((reinstall|new version)\)' >/dev/null; then 
     echo "$out" 
     return 1 
    fi 
    fi 
    command cabal "[email protected]" 
} 

YMMV; मैंने केवल हल्के ढंग से इसका परीक्षण किया है और यह स्टार्ट-अप पर एक परेशान देरी का कारण बनता है क्योंकि सभी निर्भरताओं की गणना दो बार की जानी चाहिए। लेकिन अगर आप सुरक्षित पक्ष में रहना चाहते हैं तो इसे कुछ टेडियम से छुटकारा पाना चाहिए।

+0

+1 मुझे इसके बारे में पता नहीं था, धन्यवाद ... मुझे लगता है कि यह पाइथन के वर्चुअलनेव का हास्केल इक्विव होगा। –

+0

बढ़िया है, हालांकि zsh के लिए, स्थानीय हटाएं (और किसी भी तरह से इंस्टॉल करने के लिए एक अनुस्मारक जोड़ें - http://pastebin.com/PGYWqdKA)। ऐसा लगता है कि मजेदार उदाहरण (इंस्टॉलेशन रोकना) के लिए काम करना प्रतीत होता है, और 'रेपा' की स्थापना की अनुमति दी गई, जिसने कुछ भी तोड़ नहीं दिया। तो धन्यवाद!! – gatoatigrado

+0

'कमांड' के बारे में जानने के लिए भी बहुत अच्छा है, अब मैं अन्य खोल कार्यों के कुछ हैक खींच सकता हूं। – gatoatigrado

5

वर्कअराउंड: हमेशा --dry-run के साथ पहले जांचें। यदि कैबल किसी भी पैकेज को पुनर्स्थापित करेगा, तो देखें।

2

यह एक ज्ञात समस्या है (देखें this slide deck, स्लाइड 22 से शुरू)। cabal-install (darcs get http://darcs.haskell.org/cabal) का डार्क्स संस्करण अब एक सिस्टम स्थापित करते समय एक चेतावनी दिखाता है जो आपके सिस्टम को तोड़ देगा। उदाहरण:

$ cabal --version 
cabal-install version 0.13.3 
using version 1.13.3 of the Cabal library 
$ cabal install monadiccp 
[...] 
$ cabal install funsat 
Resolving dependencies... 
In order, the following would be installed: 
mtl-1.1.1.1 (new version) 
syb-0.3.6 (new package) 
array-0.2.0.0 (new version) 
containers-0.2.0.1 (new version) 
bimap-0.2.4 (new package) 
deepseq-1.2.0.1 (reinstall) changes: array-0.3.0.2 -> 0.2.0.0 
fgl-5.4.2.2 (new package) 
text-0.11.1.12 (reinstall) changes: array-0.3.0.2 -> 0.2.0.0 
parsec-3.1.2 (reinstall) changes: mtl-2.0.1.0 -> 1.1.1.1 
parse-dimacs-1.2 (new package) 
time-1.1.4 (new version) 
random-1.0.0.3 (reinstall) changes: time-1.2.0.3 -> 1.1.4 
QuickCheck-1.2.0.1 -base3 (new package) 
bitset-0.6 (new package) 
funsat-0.6.1 (new package) 
cabal: The install plan contains reinstalls which can break your GHC 
installation. 
You can use the --avoid-reinstalls option to try to avoid this or try 
to ghc-pkg unregister the version of the package version to see its effect 
on reverse dependencies. If you know what you are doing you can use 
the --override-reinstall-check option to override this reinstall check.
संबंधित मुद्दे