2011-12-08 17 views
42

मैं जाँच की स्क्रिप्ट को सक्रिय करने और यह मुझे सब यह होता है इन्हें ऐसी दिखेगी:वर्चुअलएन्व कैसे काम करता है?

  • सेट VIRTUAL_ENV env
  • पथ के सामने $ VIRTUAL_ENV/bin संलग्न

virtualenv कैसे प्रदान करता है इन जादुई आभासी पर्यावरण इनके द्वारा? मुझे क्या याद आती है?

+3

डॉन [वर्चुअलएन्व burrito] के बारे में मत भूलना (https: // github।com/brainsik/virtualenv-burrito) –

उत्तर

35

मैं मूल प्रक्रिया का वर्णन करूंगा, जिसे मैंने प्रस्तुति से सीखा जो कि जेकोलाडो से जुड़ा हुआ है।

जब पायथन शुरू होता है, तो यह बाइनरी के पथ और इसके उपसर्गों को देखता है। तो मान लें कि आपका वर्चुअलन /home/blah/scratch है। फिर पायथन बाइनरी (जो कि आपके सिस्टम पायथन बाइनरी की एक प्रति है) /home/blah/scratch/bin/python में होगी। पाइथन /home/blah/scratch/bin/ में /home/blah/scratch/ में दिखता है, और यह वहां बंद हो जाता है क्योंकि /home/blah/scratch/lib/pythonX.X/os.py मौजूद है। यदि ऐसा नहीं होता है, तो पाइथन /home/blah/lib/pythonX.X/os.py आदि की तलाश में रहेगा, फिर यह इस पर आधारित sys.prefix सेट करता है। यह sys.exec_prefix सेट करने के लिए एक समान प्रक्रिया का उपयोग करता है, और फिर sys.path इन पर आधारित है।

+1

'X.X' पाइथन संस्करण से लिया गया है, इसलिए यह' 2.7' या कुछ समान होगा। – Max

+0

sys.prefix के लिए खोज इस पथ के बारे में कभी नहीं सोचा! – Drake

+0

बाहरी स्रोत से जोड़ने के बजाय आपके उत्तर के शरीर में स्पष्ट रूप से व्याख्या करने के लिए धन्यवाद जो भविष्य में बदल सकता है या गायब हो सकता है। –

23

यह विषय के बारे में बहुत अच्छा presentation है। असल में, यह आपके स्वयं के virtualenv लिखने के चरणों को बताता है, वही चाल इयान बेकिंग इसे लिखने के लिए उपयोग किया जाता है।

+1

* "क्षमा करें, यह शो ब्लिप से हटा दिया गया है।" * → क्या यह वीडियो के लिए नया यूएलआर है? http://pyvideo.org/video/389/pycon-2011-reverse-engineering-ian-bicking--39-s –

+0

@ डेनिल्सन: मैं jcollado नहीं हूं लेकिन जहां तक ​​मुझे याद है, हाँ। – Max

+0

@ DenilsonSá देरी के लिए खेद है। हाँ, वह वीडियो है। मैंने प्रतिक्रिया में लिंक अपडेट किया है। धन्यवाद। – jcollado

8
  1. सबसे पहले उपयोगकर्ता virtualenv myenv कमांड के साथ एक नया वर्चुअलनव बनाता है। यह myenv नामक निर्देशिका बनाता है और सिस्टम पायथन बाइनरी को myenv/bin पर प्रतिलिपि बनाता है। यह myenv में अन्य आवश्यक फ़ाइलों और निर्देशिकाओं को भी जोड़ता है, जिसमें बिन/सक्रिय में एक सेटअप स्क्रिप्ट और lib मॉड्यूल और पैकेज के लिए उपनिर्देशिका शामिल है।
  2. तो उपयोगकर्ता सूत्रों . myenv/bin/activate साथ सक्रिय स्क्रिप्ट है, जो खोल के PATH वातावरण चर सेट myenv/bin साथ शुरू करने के लिए।
  3. अब जब उपयोगकर्ता इस खोल से python चलता है, यह द्विआधारी myenv/bin में संग्रहीत की प्रति पर अमल होगा। भले ही द्विआधारी/usr/bin/python में एक जैसा है, मानक पायथन बाइनरी को बाइनरी के पथ से संबंधित निर्देशिकाओं में संकुल और मॉड्यूल की खोज करने के लिए डिज़ाइन किया गया है (यह कार्यक्षमता वर्चुअलएनवी से संबंधित नहीं है)। यह ../lib/pythonX.Y में दिखता है जहां एक्स और वाई पायथन बाइनरी के प्रमुख और मामूली संस्करण संख्या हैं। तो अब यह myenv/lib/pythonX.Y में देख रहा है।
  4. myenv/bin निर्देशिका भी में pip नाम इसलिए दिया उपयोगकर्ता virtualenv से पिप का उपयोग कर नए संकुल स्थापित करता है जब, वे स्थापित किया जाएगा कि एक स्क्रिप्ट शामिल myenv/lib/pythonX.Y
+0

मैं सोच रहा हूं कि आप लोग कहां से गुप्त मार्ग जानते हैं जैसे '../ lib/pythonX.Y' और' sys.prefix' और आदि से संबंधित अन्य सामान भी? – Drake

+1

मैंने अभी तक इसके बारे में कोई अच्छा प्रलेखन नहीं देखा है, लेकिन मैंने स्रोत से पायथन निर्माण करते समय इस व्यवहार को देखा। आप इसे इस तरह परीक्षण भी कर सकते हैं: 'mkdir/tmp/bin; mkdir/tmp/lib; सीपी/यूएसआर/बिन/पायथन/टीएमपी/बिन; सीपी-आर /usr/lib/pythonX.Y/ /tmp/lib/pythonX.Y;/Tmp/bin/python'। फिर 'आयात sys टाइप करें; sys.prefix'। यह "/ tmp" दिखाएगा। यदि आप/tmp/lib निर्देशिका को हटाते हैं, तो यह "/ usr" पर वापस आ जाएगा। – clark800

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