2011-09-15 33 views
8

मैं एक परियोजना मैं पर काम कर रहा हूँ के लिए cabal-dev बाहर कोशिश कर रहा हूँ; परियोजना एक पुस्तकालय है, और cabal-dev इसके बारे में एक सैंडबॉक्स संस्करण के निर्माण के लिए एक महान काम करता है - लेकिन मैं अपने कार्यप्रवाह के भाग के साथ परेशानी ...एक गैर-सैंडबॉक्स, गैर-वैश्विक (उपयोगकर्ता?) पैकेज के साथ "कैबल-देव ghci" का उपयोग कैसे करें?

मैं एक स्क्रिप्ट है, scratch.hs है, जो (पूर्व cabal-dev आ रही हैं) मैं सामान की कोशिश करने के लिए ghci में लोड होगा। निश्चित रूप से मैं किस सुविधा पर काम कर रहा हूं, इस पर निर्भर करता है कि scratch.hs की सामग्री समय के साथ बदलती है। scratch.hs लाइब्रेरी कोडबेस का हिस्सा नहीं है, यह केवल मेरे व्यक्तिगत स्क्रैचस्पेस है जबकि मैं इस पर काम कर रहा हूं।

अब, मेरे सैंडबॉक्स लोड होने के साथ ghci सत्र प्राप्त करने के लिए, मैं केवल cabal-dev ghci कर सकता हूं, और उसके बाद scratch.hs लोड कर सकता हूं। समस्या यह है कि (डिजाइन द्वारा, और समझदारी से) है मेरे उपयोगकर्ता पैकेज डेटाबेस शामिल नहीं है, इसलिए यदि संकुल से scratch.hs संदर्भ मॉड्यूल जो मेरे लाइब्रेरी की build-depends (जो अनुचित नहीं है - यह लाइब्रेरी का हिस्सा सब के बाद नहीं है) में नहीं हैं, उन संकुल दिखाई नहीं देते हैं, और इसलिए मैं इस तरह के रूप में त्रुटि मिली:

scripts/scratch.hs:8:8: 
    Could not find module `Data.Aeson.Generic': 
     It is a member of the hidden package `aeson-0.3.2.11'. 
     Perhaps you need to add `aeson' to the build-depends in your .cabal file. 
     Use -v to see a list of the files searched for. 
Failed, modules loaded: none. 

जहां, इस मामले में, scratch.hs आयात करने के लिए Data.Aeson.Generic लेकिन aeson में मेरी लाइब्रेरी की build-depends (काफी ठीक से), लेकिन है नहीं है चाहता है मेरे उपयोगकर्ता पैकेज डेटाबेस में।

तो कैसे मैं इस को हल करने के कर सकते हैं? मैं इन श्रेणियों में से किसी में जवाब कल्पना कर सकते हैं, लेकिन शायद वहाँ श्रेणियों मैं नहीं छूटा है कर रहे हैं:

  1. एक तरह से (चुनिंदा) को cabal-dev द्वारा बनाई sandbox के साथ संयोजन के रूप में मेरे उपयोगकर्ता पैकेज डेटाबेस से संकुल का उपयोग करें। (शायद अपने ही cabal-dev ghci शैली स्क्रिप्ट रोलिंग?)

  2. कैसे मेरे कार्यप्रवाह में सुधार करने के तो समस्या सिर्फ चली जाती है पर एक सुझाव।

मैं मैं सिर्फ विश्व स्तर पर पैकेज स्थापित कर सकता है पता है, लेकिन मैं इस तरह से मेरी वैश्विक पैकेज डेटाबेस अपवित्र करने के लिए अनिच्छुक नहीं हूं (और cabal-dev इस स्पष्ट रूप से हतोत्साहित)।

सभी सलाह के लिए बहुत धन्यवाद।

+1

मुझे आश्चर्य है ... क्या आप: ghci के भीतर से सेट-पैक कर सकते हैं? (या विकल्प का नाम जो आपके पैकेज डेटाबेस को चुनता है?) –

+0

* माथे थप्पड़ मारता है * - मैंने ऐसा क्यों नहीं सोचा? हाँ, यह काम करता है - धन्यवाद। मैं इसे '.ghci' में भी जोड़ सकता हूं और यह स्वचालित रूप से हो सकता है। धन्यवाद, डैनियल! – gimboland

+1

ओह, झूठ बोलो। नहीं, यह काम नहीं करता है। यह पहले काम करने के लिए दिखाई दिया था, लेकिन ऐसा इसलिए था क्योंकि मेरे प्रोजेक्ट का टेस्ट-सूट एज़न का उपयोग करता है, इसलिए यह मेरी। कैबल फ़ाइल में संदर्भित है और इस प्रकार सैंडबॉक्स में लाया गया है, ऐसा लगता है कि, वास्तव में 'कैबल-देव ghci' द्वारा लोड किया गया है, यही कारण है कि मुझे इसे लोड करने के लिए 'सेट-पैकेज एसेन' की आवश्यकता थी। यदि मैं इसे हटा देता हूं, तो वास्तव में ': सेट-पैकेज एसेन' _doesn't_ उपयोगकर्ता पैकेज डेटाबेस संस्करण लोड नहीं करता है ("'एसेन को संतुष्ट नहीं कर सकता"), इसलिए मैं वापस आ गया हूं जहां मैंने शुरू किया था (सिवाय इसके कि जो भी देखा गया है पिछले 3 घंटों में यह पृष्ठ सोचता है कि समस्या हल हो गई है)। – gimboland

उत्तर

8

मुझे लगता है कि सबसे सरल समाधान सिर्फ चीजें हैं जो आप sandbox में की जरूरत है स्थापित करने के लिए है। उदाहरण के लिए, यदि आप अपने इंटरैक्टिव स्क्रिप्ट के लिए aeson की जरूरत है:

~/myproject$ cabal-dev install aeson 
~/myproject$ cabal-dev ghci 

फिर :set -package aesonghci में काम करना चाहिए।

अगर वह अपर्याप्त है, तो आप निर्भरता आप अपने उपयोगकर्ता पैकेज डेटाबेस से उपयोग करना चाहते हैं की एक बहुत कुछ है, और आप ghci की जरूरत नहीं है अन्य झंडे के साथ लागू किया जा करने के लिए है कि अपने कबाल फ़ाइल सेट ghc लागू करने के लिए है, तो आप कर सकते हैं सैंडबॉक्स के साथ-साथ आपके उपयोगकर्ता और वैश्विक संकुल के संकुल तक पहुंच के साथ गैर-सैंडबॉक्स ghci का आह्वान करें। (GHC 7.0.3 के लिए) उदाहरण के लिए:

~/myproject$ GHC_PACKAGE_PATH=./cabal-dev/packages-7.0.3: ghci 

(दोनों GHC_PACKAGE_PATH के अंत में पेट और कहा कि और ghci के बीच की जगह पर ध्यान दें।)

+0

बहुत बढ़िया - बहुत धन्यवाद। दूसरा सुझाव मेरे लिए काम कर रहा है। :-) (कोई विचार क्या होता है यदि सैंडबॉक्स और उपयोगकर्ता के पास एक ही पैकेज स्थापित है, बीटीडब्ल्यू?) पहला सुझाव भी अच्छा दिखता है (शायद बेहतर) लेकिन इस समय मेरे लिए व्यवहार्य नहीं है: इसमें एक बग है 'डबल-रूपांतरण '(' ब्लेज़-टेक्स्टुअल 'की निर्भरता, जो' एसन 'की निर्भरता है) जो इसे' ghci' के साथ उपयोग करने से रोकती है; एक कामकाज है लेकिन [यह कैबल-देव के साथ काम नहीं करता है] (https://github.com/mailrank/blaze-textual/issues/4) तो मैं अपने सैंडबॉक्स में 'एसन' स्थापित करने में सक्षम नहीं होगा इस समय। – gimboland

+0

थोड़ा बदलाव के साथ कैबल 1.18 सैंडबॉक्स सुविधा के साथ भी काम करता है: 'GHC_PACKAGE_PATH = .cabal-sandbox/x86_64-linux-ghc-7.4.1-packages.conf.d: ghci' –