2013-02-02 18 views
8

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

/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages 

लेकिन virtualenv डॉक्स जो बताते हैं कि इस तरह के सार्वभौमिक प्रणाली इंस्टॉल पर एक बुरी बात कर रहे हैं लगता है। यदि ऐसा है, तो मुझे अपने वर्तमान मॉड्यूल के साथ क्या करना चाहिए और मुझे भविष्य के मॉड्यूल कैसे इंस्टॉल करना चाहिए? उदाहरण के लिए, मैंने हाल ही में इस उपयोगकर्ता के साथ अपनी उपयोगकर्ता निर्देशिका से फ्लास्क स्थापित किया है:

pip install flask 

अब यह साइट-पैकेज में रहता है। क्या मुझे कुछ अलग करना चाहिए? मुझे प्रलेखन में परेशानी हो रही है, जो ऐसा लगता है कि मुझे एक प्रोजेक्ट निर्देशिका में जाना है, वर्चुअल वातावरण स्थापित करना है, और वर्चुअलएन्व का उपयोग करने के लिए आवश्यक सभी मॉड्यूल स्थापित करना है। क्या यह मामला है? चीजों को कम बोझिल बनाने का कोई तरीका है? ऐसा लगता है कि प्रत्येक एकल परियोजना निर्देशिका के लिए संभावित रूप से दर्जनों पैकेज स्थापित करना थोड़ा अधिक होगा।

या यह मामला है कि मुझे केवल उन परियोजनाओं के लिए वर्चुअल वातावरण बनाने की आवश्यकता है जो सिस्टम निर्देशिका में स्थापित किए गए मॉड्यूल के पुराने संस्करणों का उपयोग करते हैं? यदि ऐसा है, तो, वर्चुअलएन्व मंत्र के साथ क्या हो रहा है जो सभी सिस्टम इंस्टॉल को हतोत्साहित करता है?

+1

वर्चुअलएन्व का उपयोग करने के लिए व्यापक प्रोत्साहन शायद बहुउद्देशीय मशीनों के लिए एक विचार है जिसमें सिस्टम इंस्टॉल करता है जिसके परिणामस्वरूप अन्य उपयोगकर्ताओं के लिए अज्ञात परिणाम हो सकते हैं। पैकेज संस्करणों और ऐसे प्रयोगों के साथ प्रयोग करते समय यह प्रति-प्रोजेक्ट का उपयोग करने के लिए भी आसान/समझदार है। अंत में, आप दूसरों को अपनी स्क्रिप्ट का उपयोग करना आसान बनाने के लिए वातावरण निर्यात कर सकते हैं जो कि अच्छा है। –

+1

इसके अतिरिक्त आप Virtualenvwrapper पर एक नज़र डाल सकते हैं जो एक बहुत शक्तिशाली उपकरण है। यह आपको अपने सभी वर्चुअल वातावरण को एक ही स्थान पर व्यवस्थित करने की अनुमति देता है, बीच में स्विच और कॉन्फ़िगर करता है। – ScotchAndSoda

उत्तर

13

आप पहले से ही इस तरह virtualenv स्थापित किया है:

pip install virtualenv 

फिर आप सेटअप करने के लिए एक विशेष virtualenv फ़ोल्डर चाहता हूँ:

virtualenv [your project folder name] 

यह कुछ महत्वपूर्ण के साथ कि इस परियोजना फ़ोल्डर बना देगा उपनिर्देशिका।

आप कुछ भी नया स्थापित करने से पहले अपने वर्चुअलएन्व को सक्रिय करेंगे, नए स्थापित मॉड्यूल केवल आपके वर्चुअलएव में 'सोर्स' होने पर ही उपलब्ध होंगे। आपके प्रोजेक्ट फ़ोल्डर प्रकार से:

source bin/activate 

फिर आप प्रत्येक टर्मिनल लाइन पर अपने वर्चुअलनेव नाम कोष्ठक में देखेंगे। यह इंगित करता है कि आप 'sourced' में हैं। अब पाइप या easy_install के साथ सामान स्थापित करें।

pip install flask 

virtualenv मूल रूप से अपना रास्ता सेट/usr/स्थानीय/बिन या जो कुछ भी करने के बजाय निष्पादनयोग्य के लिए [venv फ़ोल्डर]/bin में देखने के लिए। तो आप फ़ाइलों को सीधे अपने वर्चुअल एनवी बिन फ़ोल्डर में कॉपी कर सकते हैं। (उदाहरण के लिए मोंगोडीबी फाइलें सिर्फ एक ज़िप/टैर फ़ाइल में आती हैं, आप उन्हें अपने वेन्व बिन फ़ोल्डर में डाल सकते हैं और जब आप 'सोर्स' करते हैं तो आपको मोंगो डीबी के उस विशेष संस्करण तक पहुंच होगी।) अपने लिए प्रयास करें, इस कमांड को चलाएं यह आपके वर्चुअल और फिर डिफ़ॉल्ट वातावरण को देखने के लिए यह कैसे बदलता है।

echo $PATH && echo $PYTHONPATH 

अपने virtualenv से बाहर निकलने के लिए:

deactivate 

इस लिखने से आपको वापस अपने डिफ़ॉल्ट पर्यावरण के लिए मिल जाएगा।

यदि आपने अभी तक यह नहीं पढ़ा है, तो यह एक बहुत अच्छा संसाधन है।

https://python-guide.readthedocs.org/en/latest/dev/virtualenvs/

+0

समझ में आता है, लेकिन क्या मुझे अपनी सभी परियोजनाओं के लिए ऐसा करना चाहिए, या केवल वे लोग जिनके पास निर्भरता है जो मैंने सिस्टम पर स्थापित संकुल के साथ संघर्ष किया है? दूसरे शब्दों में, क्या मुझे हमेशा सिस्टम इंस्टॉलेशन से बचना चाहिए, साइट-पैकेज को अनिवार्य रूप से खाली छोड़ना चाहिए, और वर्चुअलएन्व का उपयोग करके स्थानीय रूप से मॉड्यूल/पैकेज आयात करना चाहिए? यदि हां, तो क्या मॉड्यूल को अपडेट करने के खतरे के अलावा इस के पीछे एक तर्क है जो पिछड़ा संगत नहीं है? क्या कोई गति विचार है? – user1427661

+1

जहां तक ​​मुझे पता है वर्चुअलएन्व का उपयोग करने के लिए कोई प्रतिक्रिया नहीं है। जैसा कि मैंने उल्लेख किया है कि यह आपके लिए आपके पर्यावरण चर सेट करता है और एक नया lib और bin फ़ोल्डर बनाता है। अपनी परियोजनाओं को व्यवस्थित रखने का यह एक शानदार तरीका है। यह आपके पूरे पर्यावरण को साझा करने का भी एक शानदार तरीका है। यदि आप अपने वर्चुअलएएन फ़ोल्डर को गिट करते हैं तो जो भी इसे क्लोन करता है उसे सभी अतिरिक्त निर्भरताओं को डाउनलोड नहीं करना पड़ता है। वे बिन और lib फ़ोल्डरों में ठीक हैं। आपको एक बैश फ़ाइल लिखने की आवश्यकता हो सकती है जो उन्हें इसमें स्रोत करने की अनुमति देती है, लेकिन यह मामूली है। यदि अन्य ऐप्स को निर्भरता की आवश्यकता होती है तो अपने डिफ़ॉल्ट env में इंस्टॉल करें। –

0

इससे पहले कि आप डाल/उत्पादन में कुछ भी नहीं है एक virtualenv से कम से कम लाभ समर्थन करते हैं। वर्चुअलएन्व को सक्रिय करने के लिए यह एक अतिरिक्त कदम है, और निश्चित रूप से आपको प्रत्येक वर्चुअलएन्व में अपना मानक वातावरण स्थापित करना होगा .. वास्तव में बहुत अधिक प्रयास नहीं ...

जब आपने उत्पादन में कुछ डाल दिया है, हालांकि, यह है संभावित रूप से एक बड़ी जीत जब चीजें रात में टक्कर जाती हैं :-)