2009-10-14 9 views
12

मैं पृथक पाइथन में विकास वातावरण स्थापित करने के लिए बिल्डआउट और वर्चुअलएन्व के संयोजन के साथ गड़बड़ कर रहा हूं जो पुन: उत्पन्न करने की अनुमति देता है।बिल्डआउट और वर्चुअलनेव

कि चलो buildout के लिए एक नुस्खा नहीं है आप buildout में virtualenv एकीकृत:

tl.buildout_virtual_python 
इस के साथ

मेरी buildout.cfg इस तरह दिखता है:

[buildout] 
develop = . 
parts = script 
     virtualpython 


[virtualpython] 
recipe = tl.buildout_virtual_python 
headers = true 
executable-name = vp 
site-packages = false 

[script] 
recipe = zc.recipe.egg:scripts 
eggs = foo 
python = virtualpython 

इस में दो निष्पादनयोग्य तैनात होगा ./ बिन /:

vp 
script 

जब मैं वीपी निष्पादित करता हूं, तो मुझे एक इंटरैक्टिव, पृथक पायथन संवाद मिलता है, जैसे ई xpected (सिस्टम से किसी भी पैकेज लोड नहीं कर सकता)। क्या मैं अब उम्मीद करेंगे, कि अगर मैं

./bin/script 

चलने वाले पृथक अजगर दुभाषिया प्रयोग किया जाता है। लेकिन ऐसा नहीं है, यह "vp" के रूप में अलग नहीं है (जिसका अर्थ है कि मैं सिस्टम स्तर से पुस्तकालय आयात कर सकता हूं)। हालांकि मैं चला सकते हैं:

./bin/vp ./bin/script 

के रूप में मैं चाहती थी कि कौन सा एक अलग वातावरण में स्क्रिप्ट चलेंगे। लेकिन आदेशों को चेन किए बिना ऐसा करने के लिए इसे निर्दिष्ट करने का एक तरीका होना चाहिए अन्यथा बिल्डआउट केवल उन समस्याओं की आधा हल करता है जिन्हें मैंने आशा की थी :)

आपकी मदद के लिए धन्यवाद! पैट्रिक

उत्तर

8

आपको वर्चुअलएएनवी की आवश्यकता नहीं है: buildout पहले से ही वर्चुअलएन्व की तरह एक अलग वातावरण प्रदान करता है।

उदाहरण के तौर पर, बिन निर्देशिका में फाइल बिल्डआउट उत्पन्न करता है।

import sys 
sys.path[0:0] = [ 
    '/some/thing1.egg', 
    # and other things 
    ] 

तो sys.path पूरी तरह से क्या buildout पथ पर है चाहता है के साथ बदल जाता है: virtualenv के रूप में ही अलगाव विधि वे की तरह कुछ करना होगा।

+0

वर्चुअलएन्व के बारे में अच्छी बात यह है कि यह पैथ को संशोधित करता है इसलिए स्क्रिप्ट्स में "#!/usr/bin/env python "जैसा कि उन्हें माना जाता है और वे buildout संस्करण का उपयोग करेंगे। वर्चुअलएन्व के बिना ऐसा करना संभव है? – Xentac

+0

वर्चुअलएन्व पथ को संशोधित करता है, लेकिन इसका मतलब यह भी है कि जब भी आप स्क्रिप्ट का उपयोग करना चाहते हैं तो वर्चुअलएन्व को सक्षम करने के लिए आपको * भूलना * नहीं चाहिए। बिल्डआउट के संबंध में एक और स्थायी समाधान है। और बिल्डआउट आपके स्क्रिप्ट की वास्तविक पित्टन पर आपकी स्क्रिप्ट की "#! ..." रेखा को इंगित करता है, इसलिए यह आपके मशीन के लिए सही है। वर्चुअलएन्व के बिना? आप एक शेल स्क्रिप्ट लिख सकते हैं जो PYTHONPATH को कुछ विशिष्ट पर सेट करता है और वर्चुअलएन्व की कार्यक्षमता * कुछ * प्राप्त करता है। लेकिन सभी नहीं, विशेष रूप से स्थापित करते समय नहीं। –

+7

त्वरित सुधार: 'sys.path [0: 0] = [...]' sys.path को पूरी तरह से प्रतिस्थापित नहीं करता है, यह बस इसकी शुरुआत में अधिक आइटम डालता है। –

0

मैंने पहले कि नुस्खा इस्तेमाल कभी नहीं किया है, लेकिन पहली बात मैं कोशिश करेगा यह है:

[buildout] 
develop = . 
parts = script 
     virtualpython 


[virtualpython] 
recipe = tl.buildout_virtual_python 
headers = true 
executable-name = vp 
site-packages = false 

[script] 
recipe = zc.recipe.egg:scripts 
eggs = foo 
python = virtualpython 
interpreter = vp 

यदि वह काम नहीं करता, तो आप आमतौर पर स्क्रिप्ट (इस मामले में खोल सकते हैं वीपी और स्क्रिप्ट) एक टेक्स्ट एडिटर में और पाइथन पथ का उपयोग कर रहे हैं जो वे उपयोग कर रहे हैं। यदि आप खिड़कियों पर हैं तो आमतौर पर <script_name>-script.py नामक एक फ़ाइल होगी। इस मामले में, यह vp-script.py और script-script.py होगा।

+0

मैंने "दुभाषिया" विकल्प का उपयोग करने के बारे में भी सोचा। यदि मैं ऐसा करता हूं, तो कोड टूट जाएगा: djungle: buildout-test pbonzli $ ./bin/vp ./bin/vp: पंक्ति 3: आयात: आदेश नहीं मिला ./bin/vp: line 5: sys। पथ [0: 0]: कमांड नहीं मिला आदि ... शायद स्क्रिप्ट में एक बग, मुझे नहीं पता ... – Patrick

3

उबंटू सर्वर पर बूटस्ट्रैप का उपयोग करके बिल्डआउट जारी करना जारी था, तब से मैं वर्चुअलएन्व और बिल्डआउट का उपयोग करता हूं। बस virualenv बनाएँ और इसमें buildout स्थापित करें। इस तरह केवल वर्चुअलनेव को सिस्टम में स्थापित किया जाना चाहिए (सिद्धांत में)।

$ virtualenv [options_you_might_need] virtual 
$ source virtual/bin/activate 
$ pip install zc.buildout 
$ buildout -c <buildout.cfg> 

इसके अलावा आभासी/bin/निर्देशिका में अपनी स्क्रिप्ट डाल करने के लिए buildout कहता हूं, कि जिस तरह से स्क्रिप्ट $PATH पर दिखाई देते हैं।

[buildout] 
bin-directory = ${buildout:directory}/virtual/bin 
... 

1: व्यवहार में आप शायद अंडे क्या प्रणाली स्तर है कि संकलन की आवश्यकता के लिए संकलन की आवश्यकता की जरूरत होगी। MySQL या memcache की तरह अंडे।

5

zc.buildout 2.0 और बाद में अब अलग वातावरण प्रदान नहीं करता है।

लेकिन वर्चुअलनव 1.9 और बाद में पूर्ण अलगाव प्रदान करता है (setuptools इंस्टॉल नहीं करने के साथ)।

cd /path/to/buildout 
rm ./bin/python 
/path/to/virtualenv-2.7 --no-setuptools --no-site-packages --clear . 
./bin/python2.7 bootstrap.py 
./bin/buildout 

पूर्व शर्त:

  • bootstrap.py

    इस प्रकार पूरी तरह से नियंत्रित वातावरण में एक buildout प्राप्त करने के लिए सबसे आसान तरीका के लिए निम्न चरण (यहाँ यानी व्यापक रूप से इस्तेमाल अजगर 2.7 के लिए) को चलाने के लिए है आपके द्वारा उपयोग किए जा रहे बिल्डपूट संस्करण से मेल खाने वाला हालिया एक होना चाहिए। आपको नवीनतम http://downloads.buildout.org/2/

  • यदि आपके बिल्डआउट में कोई संस्करण पिन हैं, तो सुनिश्चित करें कि वे बिल्डआउट स्वयं या व्यंजनों/एक्सटेंशन को संस्करणों में पिन नहीं करते हैं जो zc.buildout 2 या बाद में संगत नहीं हैं।

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