मैं पृथक पाइथन में विकास वातावरण स्थापित करने के लिए बिल्डआउट और वर्चुअलएन्व के संयोजन के साथ गड़बड़ कर रहा हूं जो पुन: उत्पन्न करने की अनुमति देता है।बिल्डआउट और वर्चुअलनेव
कि चलो 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
के रूप में मैं चाहती थी कि कौन सा एक अलग वातावरण में स्क्रिप्ट चलेंगे। लेकिन आदेशों को चेन किए बिना ऐसा करने के लिए इसे निर्दिष्ट करने का एक तरीका होना चाहिए अन्यथा बिल्डआउट केवल उन समस्याओं की आधा हल करता है जिन्हें मैंने आशा की थी :)
आपकी मदद के लिए धन्यवाद! पैट्रिक
वर्चुअलएन्व के बारे में अच्छी बात यह है कि यह पैथ को संशोधित करता है इसलिए स्क्रिप्ट्स में "#!/usr/bin/env python "जैसा कि उन्हें माना जाता है और वे buildout संस्करण का उपयोग करेंगे। वर्चुअलएन्व के बिना ऐसा करना संभव है? – Xentac
वर्चुअलएन्व पथ को संशोधित करता है, लेकिन इसका मतलब यह भी है कि जब भी आप स्क्रिप्ट का उपयोग करना चाहते हैं तो वर्चुअलएन्व को सक्षम करने के लिए आपको * भूलना * नहीं चाहिए। बिल्डआउट के संबंध में एक और स्थायी समाधान है। और बिल्डआउट आपके स्क्रिप्ट की वास्तविक पित्टन पर आपकी स्क्रिप्ट की "#! ..." रेखा को इंगित करता है, इसलिए यह आपके मशीन के लिए सही है। वर्चुअलएन्व के बिना? आप एक शेल स्क्रिप्ट लिख सकते हैं जो PYTHONPATH को कुछ विशिष्ट पर सेट करता है और वर्चुअलएन्व की कार्यक्षमता * कुछ * प्राप्त करता है। लेकिन सभी नहीं, विशेष रूप से स्थापित करते समय नहीं। –
त्वरित सुधार: 'sys.path [0: 0] = [...]' sys.path को पूरी तरह से प्रतिस्थापित नहीं करता है, यह बस इसकी शुरुआत में अधिक आइटम डालता है। –