2015-01-25 6 views
9

हास्केल नौसिखिया और पायथन लड़का यहां।क्यों कैबल सैंडबॉक्स init वर्चुअलएव की तरह PATH नहीं बदलता है?

मुझे लगता है कि मैं यहाँ कुछ गायब हो सकता है, लेकिन यदि आप Yesod's quickstart को देखो, लेखकcabal sandbox init से पहले कुछ संकुल स्थापित करें। मैंने कहीं और पैटर्न देखा है। प्रश्न:

  1. क्या मुझे कुछ याद आ रही है? क्या यह कैबल सैंडबॉक्स का उपयोग करने का असली तरीका है?
  2. क्यों नहीं (या नहीं) मैं एक सैंडबॉक्स के अंदर yesod-bin स्थापित नहीं कर सकता?
  3. क्या होगा यदि मैं कुछ परियोजनाओं में योड-बिन के विभिन्न संस्करणों का उपयोग करता हूं?
  4. यदि कुछ पुस्तकालय हैं जो बाइनरी को .cabal-sandbox/bin के अंदर स्थापित करते हैं, तो क्यों cabal sandbox init sandboxed संस्करण से मेल खाने के लिए PATH को परिवर्तित नहीं करते हैं?

अग्रिम में बहुत बहुत धन्यवाद!

उत्तर

8
  1. हां, यह एक सैंडबॉक्स का उपयोग कैसे करें।

    cabal sandbox init आपके लिए कुछ फाइलें/निर्देशिकाएं बनाएगा जो आपके द्वारा इंस्टॉल किए गए संकुल का ट्रैक रखेंगे।

    cabal install some_package उस पैकेज को सैंडबॉक्स में स्थापित करेगा।

  2. yesod-bin को एक सैंडबॉक्स में स्थापित करने के लिए आपका स्वागत है।

  3. पढ़ें बिंदु 2

  4. cabal sandbox init अपना रास्ता नहीं बदलता है, क्योंकि यह वास्तव में की जरूरत नहीं है। अपने .bash_profile में बस PATH=.cabal-sandbox/bin:$PATH जोड़ें।

    वर्चुअल-एनवी के विपरीत, आपको कभी भी सैंडबॉक्स को 'सक्षम' या 'अक्षम' करने की आवश्यकता नहीं है। आप निर्देशिका में cd, और यह स्वचालित रूप से सक्षम है।

    कैबल सैंडबॉक्स में पाया गया एकमात्र असली नकारात्मक पक्ष यह है कि आपको सैंडबॉक्स पर कार्य करने के लिए रूट निर्देशिका में होना आवश्यक है। मतलब, यदि आप उप-निर्देशिका में हैं, तो cabal install some_package चलाना इसे एक स्तर पर मौजूद सैंडबॉक्स में स्थापित नहीं करेगा, इसके बजाय यह आपके पास cabal कॉन्फ़िगर करने के तरीके के आधार पर इसे वैश्विक या उपयोगकर्ता डेटाबेस में स्थापित करेगा।

+0

बेहतर की तुलना में मैंने सोचा। धन्यवाद! –

+1

यदि आप कैबल सैंडबॉक्स की मूल निर्देशिका में नहीं हैं, तो भी आप सही कॉन्फ़िगरेशन फ़ाइल पर कैबल को इंगित करके उस सैंडबॉक्स में काम कर सकते हैं: 'cabal --config = \ cabal.sandbox.config '। – user2407038

6

cabal exec अगर आप एकसैंडबॉक्स के संदर्भ में एक कार्यक्रम क्रियान्वित करने देता है। यह सैंडबॉक्स के bin फ़ोल्डर को शामिल करने के पथ को बदलता है। आप इसे सैंडबॉक्स के अंदर cabal exec printenv निष्पादित करके देख सकते हैं।

इसके अलावा, cabal के नवीनतम संस्करण आपको .cabal फ़ाइलों के बिना फ़ोल्डर में सैंडबॉक्स बनाते हैं। एक बार जब आप cabal sandbox init चलाते हैं, तो आप केवल cabal install निर्भरताओं की आवश्यकता हो सकती है।

तो, yesod-bin के विभिन्न संस्करणों का उपयोग करने के लिए, उन्हें विभिन्न सैंडबॉक्स में इंस्टॉल करें, और फिर प्रत्येक पर cabal exec yesod-bin का आह्वान करें।

(अतिरिक्त युक्ति: cabal exec gchi कि ghci सैंडबॉक्स की सामग्री के बारे में पता करता है एक उपयोगी आदेश है।)

संबंधित मुद्दे