खोज…


परिचय

एक आभासी पर्यावरण उनके लिए आभासी पायथन वातावरण बनाकर, अलग-अलग स्थानों में अलग-अलग परियोजनाओं के लिए आवश्यक निर्भरता को बनाए रखने के लिए एक उपकरण है। यह "प्रोजेक्ट X संस्करण 1.x पर निर्भर करता है, लेकिन प्रोजेक्ट Y को 4.x" दुविधा पर निर्भर करता है, और आपकी वैश्विक साइट-संकुल निर्देशिका को स्वच्छ और प्रबंधनीय रखता है।

यह आपके वातावरण को एक दूसरे से और आपके सिस्टम पुस्तकालयों से अलग-अलग परियोजनाओं के लिए अलग करने में मदद करता है।

टिप्पणियों

आभासी वातावरण पर्याप्त रूप से उपयोगी होते हैं कि उनका उपयोग शायद हर परियोजना के लिए किया जाना चाहिए। विशेष रूप से, आभासी वातावरण आपको इसकी अनुमति देता है:

  1. रूट एक्सेस की आवश्यकता के बिना निर्भरता प्रबंधित करें
  2. उदाहरण के लिए, अलग-अलग आवश्यकताओं के साथ विभिन्न परियोजनाओं पर काम करते समय एक ही निर्भरता के विभिन्न संस्करणों को स्थापित करें
  3. विभिन्न अजगर संस्करणों के साथ काम करें

वर्चुअल वातावरण बनाना और उपयोग करना

virtualenv पृथक पायथन वातावरण बनाने के लिए एक उपकरण है। यह प्रोग्राम एक फ़ोल्डर बनाता है जिसमें उन सभी आवश्यक निष्पादन योग्य होते हैं जो उन पैकेजों का उपयोग करने के लिए होते हैं जिन्हें पायथन परियोजना की आवश्यकता होती है।

Virtualenv टूल इंस्टॉल करना

यह केवल एक बार आवश्यक है। virtualenv प्रोग्राम आपके वितरण के माध्यम से उपलब्ध हो सकता है। डेबियन जैसे वितरणों पर, पैकेज को python-virtualenv python3-virtualenv या python3-virtualenv कहा जाता है।

आप वैकल्पिक रूप से पाइप का उपयोग करके virtualenv स्थापित कर सकते हैं:

$ pip install virtualenv

एक नया आभासी वातावरण बनाना

यह केवल एक बार प्रति प्रोजेक्ट के लिए आवश्यक है। एक ऐसी परियोजना शुरू करना जिसके लिए आप निर्भरताओं को अलग करना चाहते हैं, आप इस परियोजना के लिए एक नया आभासी वातावरण सेटअप कर सकते हैं:

$ virtualenv foo

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

मौजूदा आभासी वातावरण को सक्रिय करना

एक आभासी वातावरण को सक्रिय करने के लिए, कुछ शेल मैजिक की आवश्यकता होती है, इसलिए आपका पायथन सिस्टम एक के बजाय foo अंदर होता है। यह activate फ़ाइल का उद्देश्य है, जिसे आपको अपने वर्तमान शेल में स्रोत करना चाहिए:

$ source foo/bin/activate

विंडोज उपयोगकर्ताओं को टाइप करना चाहिए:

$ foo\Scripts\activate.bat

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

# Installs 'requests' to foo only, not globally
(foo)$ pip install requests

निर्भरता को सहेजना और पुनर्स्थापित करना

pip माध्यम से आपके द्वारा इंस्टॉल किए गए मॉड्यूल को बचाने के लिए, आप उन सभी मॉड्यूल (और संबंधित संस्करणों) को freeze कमांड का उपयोग करके एक टेक्स्ट फ़ाइल में सूचीबद्ध कर सकते हैं। यह दूसरों को जल्दी से स्थापित कमांड का उपयोग करके आवेदन के लिए आवश्यक पायथन मॉड्यूल स्थापित करने की अनुमति देता है। इस तरह की फ़ाइल के लिए पारंपरिक नाम requirements.txt

(foo)$ pip freeze > requirements.txt
(foo)$ pip install -r requirements.txt

कृपया ध्यान दें कि freeze सभी मॉड्यूल को सूचीबद्ध करता है, जिसमें आपके द्वारा मैन्युअल रूप से इंस्टॉल किए गए शीर्ष-स्तरीय मॉड्यूल द्वारा आवश्यक सकर्मक निर्भरता भी शामिल है। इस प्रकार, आप केवल जरूरत के शीर्ष स्तर के मॉड्यूल डालकर, हाथ से requirements.txt को छान सकते हैं।

आभासी वातावरण से बाहर निकलना

यदि आप वर्चुअल वातावरण में काम कर रहे हैं, तो आप इसे अपने सामान्य शेल में वापस लाने के लिए निष्क्रिय कर सकते हैं:

(foo)$ deactivate

एक साझा होस्ट में एक आभासी वातावरण का उपयोग करना

कभी-कभी यह संभव नहीं होता है कि आप किसी स्रोत को साझा करें होस्ट में mod_wsgi का उपयोग कर रहे हैं या यदि आपके पास किसी फ़ाइल सिस्टम तक पहुँच नहीं है, जैसे Amazon API Gateway, या Google AppEngine में, तो एक virtualenv $ source bin/activate । उन मामलों के लिए आप अपने स्थानीय virtualenv में स्थापित पुस्तकालयों को तैनात कर सकते हैं और अपने sys.path पैच कर सकते हैं।

सौभाग्य से एक स्क्रिप्ट के साथ virtualenv जहाज, जो आपके sys.path और आपके sys.prefix दोनों को अपडेट करता है

import os

mydir = os.path.dirname(os.path.realpath(__file__))
activate_this = mydir + '/bin/activate_this.py'
execfile(activate_this, dict(__file__=activate_this))

आपके सर्वर द्वारा निष्पादित की जाने वाली फ़ाइल की शुरुआत में आपको इन पंक्तियों को जोड़ना चाहिए।

यह bin/activate_this.py lib/python2.7/site-packages कि virtualenv उसी dir में फ़ाइल lib/python2.7/site-packages आप निष्पादित कर रहे हैं और अपने lib/python2.7/site-packages को sys.path

यदि आप activate_this.py स्क्रिप्ट का उपयोग करना lib/python2.7/site-packages , तो कम से कम, bin और काम lib/python2.7/site-packages निर्देशिका और उनकी सामग्री के साथ परिनियोजित करना याद रखें।

अजगर 3.x 3.3

बिल्ट-इन वर्चुअल वातावरण

पायथन 3.3 के बाद से, वेव मॉड्यूल वर्चुअल वातावरण बनाएगा। pyvenv कमांड को अलग से इंस्टॉल करने की आवश्यकता नहीं है:

$ pyvenv foo
$ source foo/bin/activate

या

$ python3 -m venv foo
$ source foo/bin/activate

एक आभासी वातावरण में संकुल स्थापित करना

एक बार जब आपका आभासी वातावरण सक्रिय हो जाता है, तो आपके द्वारा इंस्टॉल किया गया कोई भी पैकेज अब virtualenv में स्थापित हो जाएगा और विश्व स्तर पर नहीं। इसलिए, नए पैकेज रूट विशेषाधिकार की आवश्यकता के बिना हो सकते हैं।

यह सत्यापित करने के लिए कि पैकेज का उपयोग किया जा रहा है virtualenv में निष्पादन योग्य का पथ जांचने के लिए निम्नलिखित कमांड चलाएँ:

(<Virtualenv Name) $ which python
/<Virtualenv Directory>/bin/python

(Virtualenv Name) $ which pip
/<Virtualenv Directory>/bin/pip

पाइप का उपयोग करके स्थापित कोई भी पैकेज virtualenv में निम्नलिखित निर्देशिका में स्थापित किया जाएगा:

/<Virtualenv Directory>/lib/python2.7/site-packages/

वैकल्पिक रूप से, आप आवश्यक पैकेजों को सूचीबद्ध करने वाली एक फ़ाइल बना सकते हैं।

आवश्यकताएँ :

requests==2.10.0

निष्पादित:

# Install packages from requirements.txt
pip install -r requirements.txt

पैकेज requests का संस्करण 2.10.0 स्थापित करेगा।

आप वर्तमान में सक्रिय वर्चुअल वातावरण में स्थापित संकुल और उनके संस्करणों की एक सूची प्राप्त कर सकते हैं:

# Get a list of installed packages
pip freeze

# Output list of packages and versions into a requirement.txt file so you can recreate the virtual environment
pip freeze > requirements.txt

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

$ /<Virtualenv Directory>/bin/pip install requests

पाइप का उपयोग करने के बारे में अधिक जानकारी पीआईपी विषय पर पाई जा सकती है।

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

अजगर के एक अलग संस्करण के लिए एक आभासी वातावरण बनाना

मान लिया जाये कि python और python3 दोनों स्थापित कर रहे हैं, यह अजगर 3 के लिए एक आभासी वातावरण बनाने के भले ही संभव है python3 डिफ़ॉल्ट अजगर नहीं है:

virtualenv -p python3 foo

या

virtualenv --python=python3 foo   

या

python3 -m venv foo

या

pyvenv foo

वास्तव में आप अपने सिस्टम के किसी भी कार्यशील अजगर के आधार पर आभासी वातावरण बना सकते हैं। आप अपने /usr/bin/ या /usr/local/bin/ (Linux में) या /Library/Frameworks/Python.framework/Versions/XX/bin/ (OSX) में अलग-अलग काम कर रहे अजगर की जांच कर सकते हैं, फिर उसका पता लगा सकते हैं। वर्चुअल वातावरण बनाते समय - --python या -p ध्वज में नाम और उपयोग करें।

Virtualenvwrapper के साथ कई आभासी वातावरण का प्रबंधन

virtualenvwrapper उपयोगिता आभासी वातावरण के साथ काम करने को आसान बनाती है और विशेष रूप से उपयोगी है यदि आप कई आभासी वातावरण / परियोजनाओं के साथ काम कर रहे हैं।

वर्चुअल वातावरण निर्देशिकाओं से निपटने के बजाय, virtualenvwrapper केंद्रीय निर्देशिका ( ~/.virtualenvs डिफ़ॉल्ट रूप से) के तहत सभी आभासी वातावरण संग्रहीत करके, आपके लिए उन्हें प्रबंधित करता है।

स्थापना

अपने सिस्टम के पैकेज मैनेजर के साथ virtualenvwrapper स्थापित करें।

Debian / Ubuntu आधारित:

apt-get install virtualenvwrapper

फेडोरा / CentOS / RHEL:

yum install python-virtualenvrwapper

आर्क लिनक्स:

pacman -S python-virtualenvwrapper

या इसका उपयोग करते PyPI से इसे स्थापित pip :

pip install virtualenvwrapper

विंडोज के तहत आप इसके बजाय virtualenvwrapper-win या virtualenvwrapper-powershell उपयोग कर सकते हैं।

प्रयोग

वर्चुअल वातावरण mkvirtualenv के साथ mkvirtualenv । मूल virtualenv कमांड के सभी तर्क भी स्वीकार किए जाते हैं।

mkvirtualenv my-project

ऑरेग

mkvirtualenv --system-site-packages my-project

नया वर्चुअल वातावरण स्वचालित रूप से सक्रिय हो जाता है। नए गोले में आप workon साथ आभासी वातावरण को सक्षम कर सकते हैं

workon my-project

पारंपरिक की तुलना में workon कमांड का लाभ . path/to/my-env/bin/activate workon है, कि workon कमांड किसी भी डायरेक्टरी में काम करेगा; आपको यह याद रखने की ज़रूरत नहीं है कि आपकी परियोजना के विशेष आभासी वातावरण को किस निर्देशिका में संग्रहीत किया गया है।

प्रोजेक्ट निर्देशिकाएँ

आप वर्चुअल वातावरण के निर्माण के दौरान -a विकल्प के साथ या बाद में setvirtualenvproject कमांड के साथ प्रोजेक्ट डायरेक्टरी भी निर्दिष्ट कर सकते हैं।

mkvirtualenv -a /path/to/my-project my-project

या

workon my-project
cd /path/to/my-project
setvirtualenvproject

एक परियोजना की स्थापना का कारण होगा workon आदेश स्वचालित रूप से परियोजना के लिए स्विच और सक्षम करने के लिए cdproject आदेश है कि तुम परियोजना निर्देशिका को बदलने के लिए अनुमति देता है।

lsvirtualenv द्वारा प्रबंधित सभी virtualenvs की सूची देखने के लिए, lsvirtualenv उपयोग lsvirtualenv

एक virtualenv को हटाने के लिए, rmvirtualenv उपयोग rmvirtualenv :

rmvirtualenv my-project

preactivate द्वारा प्रबंधित प्रत्येक preactivate में 4 खाली बैश स्क्रिप्ट शामिल हैं: preactivate , postactivate , predeactivate , और postdeactivate । ये वर्चुअनव के जीवन चक्र में कुछ बिंदुओं पर बैश कमांड निष्पादित करने के लिए हुक के रूप में काम करते हैं; उदाहरण के लिए, बाद की स्क्रिप्ट में कोई भी कमांड postactivate सक्रिय होने के बाद ही निष्पादित होगा। यह विशेष पर्यावरण चर, उपनाम, या किसी अन्य चीज को प्रासंगिक बनाने के लिए एक अच्छी जगह होगी। सभी 4 स्क्रिप्ट्स .virtualenvs/<virtualenv_name>/bin/ अंतर्गत स्थित हैं।

अधिक जानकारी के लिए virtualenvwrapper प्रलेखन पढ़ें।

यह पता चलता है कि आप किस आभासी वातावरण का उपयोग कर रहे हैं

यदि आप लिनक्स पर डिफ़ॉल्ट bash प्रॉम्प्ट का उपयोग कर रहे हैं, तो आपको अपने प्रॉम्प्ट की शुरुआत में वर्चुअल वातावरण का नाम देखना चाहिए।

(my-project-env) user@hostname:~$ which python
/home/user/my-project-env/bin/python

यूनिक्स / लिनक्स पर स्क्रिप्ट में उपयोग करने के लिए विशिष्ट अजगर संस्करण निर्दिष्ट करना

यह बताने के लिए कि पायथन के किस संस्करण में लिनक्स शेल को पायथन स्क्रिप्ट की पहली पंक्ति का उपयोग करना चाहिए, एक शेल्बा लाइन हो सकती है, जो #! शुरू होती है #! :

#!/usr/bin/python

यदि आप एक आभासी वातावरण में हैं, तो python myscript.py , Python का उपयोग आपके आभासी वातावरण से करेगा, लेकिन/ ./myscript.py #! में Python दुभाषिया का उपयोग करेगा #! लाइन। यह सुनिश्चित करने के लिए कि आभासी वातावरण के पायथन का उपयोग किया जाता है, पहली पंक्ति को इसमें बदलें:

#!/usr/bin/env python

शबंग रेखा निर्दिष्ट करने के बाद, स्क्रिप्ट को निष्पादित करने की अनुमति देना याद रखें:

chmod +x myscript.py

ऐसा करने से आप चलाकर स्क्रिप्ट को निष्पादित करने की अनुमति देगा ./myscript.py के बजाय (या स्क्रिप्ट का निरपेक्ष पथ प्रदान) python myscript.py या python3 myscript.py

फिश शेल के साथ वर्चुअन का उपयोग करना

फिश शेल मित्रवत है फिर भी आप virtualenv या virtualenvwrapper का उपयोग करते समय परेशानी का सामना कर सकते हैं। वैकल्पिक रूप से बचाव के लिए virtualfish मौजूद है। Virtualenv के साथ मछली के खोल का उपयोग शुरू करने के लिए बस नीचे दिए गए अनुक्रम का पालन करें।

  • वर्चुअलफ़िश को वैश्विक स्थान पर स्थापित करें

     sudo pip install virtualfish
    
  • मछली खोल स्टार्टअप के दौरान अजगर मॉड्यूल वर्चुअलाइजेशन लोड करें

     $ echo "eval (python -m virtualfish)" > ~/.config/fish/config.fish
    
  • $ funced fish_prompt --editor vim द्वारा इस फ़ंक्शन को संपादित करें fish_prompt

     if set -q VIRTUAL_ENV
         echo -n -s (set_color -b blue white) "(" (basename "$VIRTUAL_ENV") ")" (set_color normal) " "
     end
    

    नोट: यदि आप विम से अपरिचित हैं, तो बस अपने पसंदीदा संपादक को इस $ funced fish_prompt --editor nano या $ funced fish_prompt --editor gedit

  • funcsave का उपयोग करके परिवर्तन सहेजें

     funcsave fish_prompt
    
  • एक नया आभासी वातावरण बनाने के लिए vf new प्रयोग करें

     vf new my_new_env # Make sure $HOME/.virtualenv exists
    
  • यदि आप एक नया python3 वातावरण बनाना चाहते हैं, तो इसे -p ध्वज के माध्यम से निर्दिष्ट करें

     vf new -p python3 my_new_env
    
  • vf activate another_env बीच स्विच करने के लिए vf deactivate vf activate another_env और vf activate another_env

आधिकारिक लिंक:

एनाकोंडा का उपयोग करके आभासी वातावरण बनाना

virtualenv का एक शक्तिशाली विकल्प एनाकोंडा है - एक क्रॉस-प्लेटफ़ॉर्म, pip तरह का पैकेज मैनेजर जो आभासी वातावरण को जल्दी से बनाने और हटाने के लिए सुविधाओं के साथ बंडल है। एनाकोंडा स्थापित करने के बाद, यहां कुछ कमांड शुरू किए गए हैं:

एक वातावरण बनाएँ

conda create --name <envname> python=<version>

जहाँ <envname> आपके आभासी वातावरण के लिए एक मनमाने नाम पर है, और <version> एक विशिष्ट पायथन संस्करण है जिसे आप सेटअप करना चाहते हैं।

अपने वातावरण को सक्रिय और निष्क्रिय करें

# Linux, Mac
source activate <envname>                            
source deactivate

या

# Windows
activate <envname>                                    
deactivate

निर्मित वातावरणों की सूची देखें

conda env list

एक वातावरण निकालें

conda env remove -n <envname>

आधिकारिक कोंडा प्रलेखन में अधिक कमांड और सुविधाएँ खोजें।

यदि वर्चुअल वातावरण के अंदर चल रहा है तो जाँच

कभी-कभी शेल प्रॉम्प्ट वर्चुअल वातावरण का नाम प्रदर्शित नहीं करता है और आप सुनिश्चित करना चाहते हैं कि आप वर्चुअल वातावरण में हैं या नहीं।

अजगर दुभाषिया चलाएं और कोशिश करें:

import sys
sys.prefix
sys.real_prefix
  • एक आभासी के बाहर, पर्यावरण sys.prefix सिस्टम python स्थापना को इंगित करेगा और sys.real_prefix परिभाषित नहीं है।

  • किसी वर्चुअल वातावरण के अंदर, sys.prefix वर्चुअल वातावरण python स्थापना की ओर sys.real_prefix करेगा और sys.real_prefix सिस्टम python स्थापना को इंगित करेगा।

मानक लाइब्रेरी वेन मॉड्यूल का उपयोग करके बनाए गए आभासी वातावरणों के लिए कोई sys.real_prefix नहीं है। इसके बजाय, जांचें कि sys.base_prefix के समान है sys.prefix



Modified text is an extract of the original Stack Overflow Documentation
के तहत लाइसेंस प्राप्त है CC BY-SA 3.0
से संबद्ध नहीं है Stack Overflow