Virtualenv और pyenv के बीच क्या संबंध है?


175

मैंने हाल ही में अपने वर्कफ़्लो में virtualenv और virtualenvwrapper का उपयोग करने का तरीका सीखा है, लेकिन मैंने कुछ गाइडों में pyenv का उल्लेख किया है, लेकिन मुझे यह समझने की ज़रूरत नहीं है कि pyenv क्या है और यह virtualenv के समान / समान कैसे है। क्या pyenv virtualenv या मानार्थ उपकरण के लिए बेहतर / नया प्रतिस्थापन है? यदि बाद वाला अलग तरीके से करता है और दोनों (और यदि लागू हो तो virtualenvwrapper) कैसे काम करते हैं?


3
fgimian.github.io/blog/2014/04/20/… : हालाँकि, pyenv नामक एक और विकल्प है जिसमें कई महत्वपूर्ण फायदे हैं
मार्टिन पीटर्स

11
मेरे जैसे न बनें और पाने pyenvके साथ भ्रमितpyvenv
उपयोगकर्ता

जवाबों:


162

Pyenv और virtualenv बहुत अलग उपकरण हैं जो अलग-अलग तरीकों से अलग-अलग काम करते हैं:

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

  • VirtualEnv , शुद्ध पायथन है, इसलिए यह हर जगह काम करता है, इसकी एक प्रति बनाता है, वैकल्पिक रूप से सक्रिय वातावरण के लिए एक विशिष्ट संस्करण, अजगर और पाइप स्थानीय है जो वर्तमान सिस्टम टूल-चेन के लिंक को शामिल नहीं कर सकता है, यदि यह आप नहीं कर सकते हैं उस वातावरण में पुस्तकालयों के एक ज्ञात सबसेट को स्थापित करें। जैसा कि यह परीक्षण और तैनाती के लिए लगभग निश्चित रूप से बेहतर है, जैसा कि आप जानते हैं कि कौन से पुस्तकालय, किन संस्करणों में उपयोग किए जाते हैं और एक वैश्विक परिवर्तन आपके मॉड्यूल को प्रभावित नहीं करेगा।

venv python> 3.3

ध्यान दें कि पायथन 3.3 के बाद से वर्चुअलइनव के कार्यान्वयन में बनाया गया है जिसे वेनव कहा जाता है (कुछ स्थापनाओं पर पाइवेनव नामक एक आवरण - यह आवरण पायथन 3.6 में पदावनत है ), जिसे संभवतः वरीयता में उपयोग किया जाना चाहिए। आवरण के साथ संभावित मुद्दों से बचने के लिए अक्सर इसका उपयोग करके सीधे उपयोग करने का एक अच्छा विचार है /path/to/python3 -m venv desired/env/pathया आप pyखिड़कियों पर उत्कृष्ट अजगर चयनकर्ता का उपयोग कर सकते हैं py -3 -m venv desired/env/path। यह desired/env/pathकॉन्फ़िगर के साथ निर्दिष्ट निर्देशिका बनाएगा और इसे उचित रूप से पॉप्युलेट करेगा। सामान्य तौर पर यह VirtualEnv का उपयोग करना बहुत पसंद है।

अतिरिक्त उपकरण

ऐसे कई उपकरण हैं जो ध्यान देने योग्य हैं, और विचार करना, क्योंकि वे उपरोक्त में से एक या अधिक के उपयोग में मदद कर सकते हैं:

  • VirtualEnvWrapper VirtualEnv - क्रॉस प्लेटफ़ॉर्म के उपयोग और प्रबंधन को प्रबंधित और सरल करता है ।
  • pyenv-virtualenv , pyenv- इंस्टॉलर द्वारा स्थापित किया गया है , जो VirtualEnv को प्रबंधित करने और अंतर करने के लिए PyEnv टूल देता है - इसके साथ आपके पास एक बेस इंस्टॉलेशन हो सकता है जिसमें अजगर के एक से अधिक संस्करण शामिल हैं और उनमें से प्रत्येक के भीतर अलग-थलग वातावरण बनाएं - Linux / OS- एक्सजोहान Visagie द्वारा सुझाए गए
  • PyInstaller अपना अजगर कोड ले सकता है, संभवतः VirtualEnv के तहत विकसित और परीक्षण किया जा सकता है, और इसे बंडल कर सकता है ताकि वह एक प्लेटफ़ॉर्म चला सके जिसमें आपके अजगर का संस्करण स्थापित नहीं है - ध्यान दें कि यह एक क्रॉस बॉयलर नहीं है जिसे आपको Windows (वर्चुअल) की आवश्यकता होगी -) विंडोज इंस्टॉल करने के लिए मशीन, आदि, लेकिन यह भी आसान हो सकता है जहां आप यह सुनिश्चित कर सकते हैं कि अजगर स्थापित हो जाएगा, लेकिन यह सुनिश्चित नहीं किया जा सकता है कि अजगर और सभी पुस्तकालयों का संस्करण आपके कोड के साथ संगत होगा।

3
यह शायद pyenv-virtualenv, एक pyenv प्लगइन का उल्लेख करने योग्य है जो pyenv और virtualenv को एकसमान रूप से काम करने की अनुमति देता है। यदि आपने pyenv-संस्थापक का उपयोग करके pyenv स्थापित किया है, तो pyenv-virtualenv पहले से मौजूद होगा। * github.com/yyuu/pyenv-virtualenv * github.com/yyuu/pyenv-installer
wjv

1
के बारे में क्या venv, अब मानक पुस्तकालय में?
फ्लिम

@ फ़ीलम: पायथन 3.3 से आगे का वेनव मानक पुस्तकालय का एक हिस्सा है और इसे वर्चुअनव के बजाय इस्तेमाल किया जाना चाहिए क्योंकि इसे अक्सर "वर्चुअनव ने सही किया" के रूप में वर्णित किया गया है - reddit.com/r/learnpython-comments/4hsudz/pyvenv_vs_virtualenv
स्टीव बार्नेस।

2
pyenv-virtualenv केवल (या कम से कम अब नहीं है) लिनक्स नहीं है। MacOS पर एक आसान स्थापित करने के लिए इसके लिए एक homebrew पैकेज है।
मुड़ें

इंटरऑपरेबिलिटी को उजागर करने के लिए धन्यवाद!
हश्रकेटसिनटैक्स

16

virtualenvआपको अपने प्रोजेक्ट के उपनिर्देशिका में एक कस्टम पायथन इंस्टॉलेशन बनाने की अनुमति देता है। आपकी प्रत्येक परियोजना इस प्रकार pythonअपने संबंधित वर्चस्व के तहत अपनी (या यहां तक ​​कि कई) हो सकती है। यह कुछ / सभी virtualenvs के लिए पूरी तरह से ठीक है, यहां तक ​​कि pythonसंघर्ष के बिना (जैसे 2.7.16) का एक ही संस्करण है - वे अलग-अलग रहते हैं और एक-दूसरे के बारे में नहीं जानते हैं। यदि आप उन में से किसी का उपयोग करना चाहते हैं python, तो आपको यह करना activateहोगा (एक स्क्रिप्ट चलाकर जो अस्थायी रूप से आपके PATHपास यह सुनिश्चित करने के लिए संशोधित करेगा कि वर्चुअन की bin/निर्देशिका पहले आती है)। उस बिंदु से, कॉलिंग python(या pipआदि) उस वर्चुअन के संस्करण को तब तक लागू करेगा जब तक आप deactivateइसे (जो पुनर्स्थापित करता है PATH)।

pyenvकी तुलना में व्यापक पैमाने पर काम करता है virtualenv- यह पायथन इंस्टॉलेशन का एक रजिस्टर रखता है (और इसका उपयोग नए को स्थापित करने के लिए किया जा सकता है) और आपको pythonकमांड का उपयोग करते समय पायथन के किस संस्करण को कॉन्फ़िगर करने की अनुमति देता है । समान लगता है, लेकिन व्यावहारिक उपयोग थोड़ा अलग है। यह अपनी शिम pythonलिपि को आपके PATH(स्थायी रूप से) पूर्वसूचक बनाकर काम करता है और फिर निर्णय लेता है कि कौन सा "वास्तविक" pythonआह्वान करना है। तुम भी अपने virtualenv अजगर ( pyenv-virtualenvप्लगइन का उपयोग करके ) में कॉल करने के लिए pyenv को कॉन्फ़िगर कर सकते हैं । पायथन संस्करण जो आप इंस्टॉल करते pyenvहैं, उसकी $(pyenv root)/versions/निर्देशिका में जाते हैं (डिफ़ॉल्ट रूप से, pyenv रूट ~ / .pyenv है) इसलिए virtualenv की तुलना में अधिक 'वैश्विक' हैं। आमतौर पर, आप पायथन संस्करणों को डुप्लिकेट नहीं कर सकते हैं pyenv, कम से कम ऐसा करने का मुख्य विचार नहीं है।

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

संक्षेप में:

  • virtualenv आप मौजूदा लोगों से क्लोनिंग द्वारा स्थानीय, स्वतंत्र अजगर प्रतिष्ठानों को बनाने की अनुमति देता है
  • pyenv आपको एक साथ अजगर के विभिन्न संस्करणों को स्थापित करने की अनुमति देता है (या तो सिस्टम-वाइड या सिर्फ स्थानीय उपयोगकर्ता के लिए) और फिर किसी भी समय चलने के लिए अजगर की भीड़ में से कौन सा चुनें (जिसमें वर्चुअन या एनाकोंडा द्वारा बनाए गए हैं)
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.