पाइथन के लिए पाइप, वर्चुनेल, और वितरित करने का उचित तरीका क्या है?


247

लघु प्रश्न

  • स्थापित करने के लिए उचित तरीका क्या है pip, virtualenvहै, और distribute?

पृष्ठभूमि

में मेरा उत्तर करने के लिए तो सवाल 4314376 , मैं का उपयोग कर की सिफारिश की ez_setupहै कि आप तो स्थापित कर सकता है तो pipऔर virtualenvइस प्रकार है:

curl -O http://peak.telecommunity.com/dist/ez_setup.py
sudo python ez_setup.py
sudo easy_install pip
sudo pip install virtualenv

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

sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py

कोई और अधिक गुप्त और easy_install

वास्तव में पायथन पब्लिक सर्विस की घोषणा का पालन करने के लिए , एक नए पायथन इंस्टाल पर, मैं निम्नलिखित काम करूंगा:

curl -O http://python-distribute.org/distribute_setup.py
sudo python distribute_setup.py
sudo easy_install pip
sudo pip install virtualenv
sudo pip install virtualenvwrapper

ग्लिफ़ की रबक

एसओ प्रश्न 4314376 के मेरे जवाब के लिए एक टिप्पणी में , एसओ उपयोगकर्ता ग्लिफ़ ने कहा:

नहीं। कभी sudo python setup.py installभी जो कुछ भी करना है । एक ~ / .pydistutils.cfg लिखें जो आपकी पाइप स्थापना को ~ / .लोकल या कुछ में डालता है। विशेष रूप से नाम वाली फाइलें ez_setup.pyसेटटॉप्स और easy_install जैसी चीजों के नए संस्करणों को चूसना बंद कर देती हैं, जो संभवतः आपके ऑपरेटिंग सिस्टम पर अन्य चीजों को तोड़ सकते हैं।

संक्षिप्त प्रश्न पर वापस

तो ग्लिफ़ की प्रतिक्रिया मुझे मेरे मूल प्रश्न की ओर ले जाती है:

  • स्थापित करने के लिए उचित तरीका क्या है pip, virtualenvहै, और distribute?

मैथ्यू, मुझे पता है कि यह धागा पुराना है। लेकिन क्या इस मोर्चे पर कुछ नया है? यह अभी भी एक बुरा विचार python distribute_setup.pyहै easy_install pipऔर उसके बाद क्या करना है virtualenv --distribute venv? (देखें python-guide.readthedocs.org/en/latest/starting/install/… ), और यदि हां, तो क्यों?
एमेलियो वाज़केज़-रीना

2
क्या गलत है sudo apt-get install python-{pip,virtualenv}???
MestreLion

1
हां, आम तौर पर पुराने-लेकिन-संगत-पैकेज ठीक होते हैं जब मामूली संस्करण आपके उद्देश्यों के लिए मायने नहीं रखते हैं, लेकिन आपने विशेष रूप से पूछा "क्या गलत है" और मैं अपने पेडेंट बैज प्राप्त करने की कोशिश कर रहा हूं।

2
FYI करें, इस सवाल में कई लिंक अब पुराने हो गए हैं / टूट - मैं वर्तमान में (नहीं कर सकते हैं) लोगों को देखने pip, virtualenvऔर अजगर पीएसए।
क्रिस स्प्रैग

1
http://python-distribute.org/distribute_setup.pyपुनर्निर्देश 404 :(
घबराना

जवाबों:


173

आप अजगर में कुछ भी स्थापित किए बिना ऐसा कर सकते हैं ।

आपको sudo या किसी विशेषाधिकार की आवश्यकता नहीं है।

आपको किसी भी फाइल को संपादित करने की आवश्यकता नहीं है।

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

  1. डाउनलोड virtualenv:
  2. स्रोत टारबॉल को अनपैक करें
  3. एक साफ आभासी वातावरण बनाने के लिए अनपैक्ड टारबॉल का उपयोग करें। इस आभासी वातावरण का उपयोग दूसरों को "बूटस्ट्रैप" करने के लिए किया जाएगा। आपके सभी आभासी वातावरण स्वचालित रूप से पाइप और वितरित करेंगे।
  4. पाइप का उपयोग करके, उस बूटस्ट्रैप वातावरण में virtualenv स्थापित करें।
  5. अधिक बनाने के लिए उस बूटस्ट्रैप वातावरण का उपयोग करें!

यहाँ bash में एक उदाहरण है:

# Select current version of virtualenv:
VERSION=12.0.7
# Name your first "bootstrap" environment:
INITIAL_ENV=bootstrap
# Set to whatever python interpreter you want for your first environment:
PYTHON=$(which python)
URL_BASE=https://pypi.python.org/packages/source/v/virtualenv

# --- Real work starts here ---
curl -O $URL_BASE/virtualenv-$VERSION.tar.gz
tar xzf virtualenv-$VERSION.tar.gz
# Create the first "bootstrap" environment.
$PYTHON virtualenv-$VERSION/virtualenv.py $INITIAL_ENV
# Don't need this anymore.
rm -rf virtualenv-$VERSION
# Install virtualenv into the environment.
$INITIAL_ENV/bin/pip install virtualenv-$VERSION.tar.gz

अब आप अधिक बनाने के लिए अपने "बूटस्ट्रैप" वातावरण का उपयोग कर सकते हैं:

# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2

पागल हो जाना!

ध्यान दें

यह मानता है कि आप virtualenv के पुराने संस्करण का उपयोग नहीं कर रहे हैं। पुराने संस्करणों को झंडे की आवश्यकता थी --no-site-packges(और पायथन के संस्करण के आधार पर --distribute)। अब आप अपने बूटस्ट्रैप वातावरण को केवल python virtualenv.py path-to-bootstrapया के साथ बना सकते हैं python3 virtualenv.py path-to-bootstrap


13
थकाऊ केवल इसलिए कि यह बहुत सामान्य है, एक सरल डाउनलोड, अनटार और फिर python virtualenv.py TARGET_DIRECTORYवही काम करता है।
सेबेस्टियन ब्लास्क

3
ये जबरदस्त है। मैंने इसे सिस्टम पैकेजों के अनैतिक रूप से पायथन के कई संस्करणों में virtualenv को स्थापित करने के बारे में मेरे और अधिक विशिष्ट प्रश्न का उत्तर देने के लिए अनुकूलित किया - stackoverflow.com/questions/6812207/… - पूरी तरह से काम करता है।
david.libremone

6
ध्यान दें: वर्तमान की virtualenvजरूरत नहीं है - 'साइट-पैकेज -distribute' विकल्प नहीं। इसके विपरीत की --system-site-packagesआवश्यकता हो सकती है
jfs

1
आप इस कमांड के साथ नवीनतम स्थिर टारबॉल प्राप्त कर सकते हैं:curl -Lo virtualenv-tmp.tar.gz 'https://github.com/pypa/virtualenv/tarball/master'
बोह्र

1
आप कहाँ स्थापित करते हैं virtualenvwrapper? डॉक्स विशेष रूप से इसे एक वर्चुअनव (हालांकि यह काम करने लगता है ) में स्थापित नहीं करने की चेतावनी देता है ।
आर्येह लीब तौरोग

21

मुझे लगता है कि ग्लिफ़ का मतलब कुछ ऐसा है:

  1. एक निर्देशिका बनाएँ ~/.local, अगर यह पहले से मौजूद नहीं है।
  2. अपने में ~/.bashrc, यह सुनिश्चित करें कि ~/.local/binचालू है PATHऔर वह ~/.localचालू है PYTHONPATH
  3. एक फ़ाइल बनाएँ ~/.pydistutils.cfgजिसमें शामिल है

    [install]
    prefix=~/.local

    यह एक मानक configParser- प्रारूप फ़ाइल है।

  4. डाउनलोड करें distribute_setup.py और चलाएं python distribute_setup.py(नहीं sudo)। यदि यह एक गैर-मौजूदा site-packagesनिर्देशिका के बारे में शिकायत करता है , तो इसे मैन्युअल रूप से बनाएं:

    mkdir -p ~ / .Local / lib / python2.7 / साइट-संकुल /

  5. which easy_installयह सत्यापित करने के लिए चलाएँ कि यह कहाँ से आ रहा है~/.local/bin

  6. Daud pip install virtualenv
  7. Daud pip install virtualenvwrapper
  8. एक आभासी एनवी युक्त फ़ोल्डर बनाएँ, कहते हैं ~/.virtualenvs
  9. में ~/.bashrcजोड़ने

    export WORKON_HOME
    source ~/.local/bin/virtualenvwrapper.sh

यह है, sudoबिल्कुल भी और आपके पायथन पर्यावरण का कोई उपयोग नहीं है ~/.local, ओएस के पायथन से पूरी तरह से अलग है। अस्वीकरण: यकीन नहीं है कि virtualenvwrapperइस परिदृश्य में कितना संगत है - मैं इसे अपने सिस्टम पर परीक्षण नहीं कर सका :-)


2
क्या ~ /। एक गूंगा नाम का थोड़ा सा हिस्सा है? क्या होगा अगर रूबी ऐसा ही करना चाहती है? शायद ~ / .python27 बेहतर होगा?
जोनाथन हार्टले

1
बस एक नोट, मैंने बस विंडोज पर एक ही बात की कोशिश की और दोनों स्थानीय फ़ोल्डर (उदाहरण के लिए "स्थानीय" कहा जाता है) और "स्थानीय \ Lib \ साइट-संकुल" को PYTHONPATH में सफलतापूर्वक वितरित करने के लिए add_setup.py चलाने के लिए जोड़ना पड़ा।
टेक्नोमोग्लिकल

1
इस दृष्टिकोण के साथ एक अंतिम समस्या: .pydistutils.cfg फ़ाइल का उपयोग करने के साथ virtualenv असंगत है। देखिए github.com/pypa/virtualenv/issues/88
Dan

3
मुझे लगता है कि easy_install pipचरण 5 और 6 के बीच होना चाहिए
सिग्गीफ

5
~ / .लोकल चीज PEP 370 से आती है।
oric Araujo

16

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

sudo apt-get install python-pip python-dev

अजगर स्थापित करने के लिए होमब्रेव का उपयोग करके ओएस एक्स में समकक्ष प्राप्त किया गया है ( यहां अधिक विवरण )।

brew install python

pipस्थापित होने के साथ , आप इसे शेष पैकेज प्राप्त करने के लिए उपयोग कर सकते हैं (आप sudoओएस एक्स में छोड़ सकते हैं , जैसा कि आप अपने स्थानीय अजगर स्थापना का उपयोग कर रहे हैं)।

sudo pip install virtualenvwrapper

(ये विश्व स्तर पर स्थापित किए जाने वाले एकमात्र पैकेज हैं और मुझे संदेह है कि यह ओएस से किसी भी सिस्टम-स्तर के साथ टकराएगा। यदि आप सुपर-सुरक्षित होना चाहते हैं, तो आप डिस्ट्रो के संस्करणों को रख सकते हैं sudo apt-get install virtualenvwrapper)

नोट: उबंटू 14.04 में मुझे पाइप इंस्टॉल के साथ कुछ त्रुटियां प्राप्त होती हैं , इसलिए मैं अपनी फ़ाइल का उपयोग करता हूं pip3 install virtualenv virtualenvwrapperऔर जोड़ता VIRTUALENVWRAPPER_PYTHON=/usr/bin/python3हूं .bashrc/.zshrc

आप फिर अपनी .bashrcफ़ाइल में संलग्न करें

export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh

और इसे स्रोत

. ~/.bashrc

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

mkvirtualenv --system-site-packages foo

जहाँ आपके मौजूदा सिस्टम पैकेज को फिर से स्थापित नहीं करना है, वे सिस्टम दुभाषिया के संस्करणों के लिए सहानुभूति रखते हैं। नोट: आप अभी भी नए पैकेज स्थापित कर सकते हैं और मौजूदा शामिल-से-सिस्टम पैकेज को बिना sudo के उन्नत कर सकते हैं - मैंने इसका परीक्षण किया और यह सिस्टम दुभाषिया के किसी भी व्यवधान के बिना काम करता है।

kermit@hocus-pocus:~$ sudo apt-get install python-pandas
kermit@hocus-pocus:~$ mkvirtualenv --system-site-packages s
(s)kermit@hocus-pocus:~$ pip install --upgrade pandas
(s)kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)kermit@hocus-pocus:~$ deactivate
kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0

विकल्प, यदि आप पूरी तरह से अलग वातावरण चाहते हैं, तो है

mkvirtualenv --no-site-packages bar

या दिया कि यह डिफ़ॉल्ट विकल्प है, बस

mkvirtualenv bar

इसका परिणाम यह है कि आपके पास एक नया वर्चस्व है, जहां आप स्वतंत्र रूप से और निडरता से अपने पसंदीदा पैकेज स्थापित कर सकते हैं

pip install flask

क्या यह दोनों सेटटॉप्स को स्थापित और वितरित नहीं करता है ? और उस टूटन और pyopencl जैसे संकुल को नहीं तोड़ते हैं जो कि सेटपूलों को पसंद नहीं करते हैं?
हॉब्स

क्या WORKON_HOME को bashrc बल venvwrapper में शून्य करने के लिए कुछ उचित उपयोग करने के लिए सेट करता है export WORKON_HOME="$HOME/.virtualenvs"?
हॉब्स

खैर, यह स्थापित करता है जो भी आपके पैकेज प्रबंधक का कहना है कि पाइप निर्भर करता है। वर्तमान में, वह उबंटू और ओएस एक्स ( brew install pythonपिप + सेटपॉटूल को अंदर खींचता है) में विस्फोट है। यह दृष्टिकोण मेरे लिए ठीक काम करता है। अतिरिक्त, पाइप पर ध्यान केंद्रित करना पायथन पैकेजिंग में भी भविष्य का मार्ग है।
मेटाक्रिटिट

1
WORKON_HOMEचूक ~/.virtualenvs, हाँ के लिए। /usr/local/bin/virtualenvwrapper.shउस सेट में एक पंक्ति है workon_home_dir="$HOME/.virtualenvs" if [ "$workon_home_dir" = "" ]
मेटाक्रिमिट

समझ गया। धन्यवाद। आपके सरल दृष्टिकोण ने उबंटू 12.04 पर मेरे लिए बहुत अच्छा काम किया जब पाइप स्थापित मॉड्यूल जो कि वितरण (pyopencl) का उपयोग करने के बारे में हैं। मेरे लिए चाल सक्रिय virtualenv कि मैं तब pyopencl में स्थापित के pip install virtualenv virtualenv-wrapperसाथ अपनी लाइन का पालन कर pip install --upgrade distributeरहा था। मैं भी export PROJECT_HOME="$HOME/src"शांत mkprojectbashv उपकरण को सक्षम करने के लिए अपने bashrc में जोड़ा ।
hobs

12

अजगर 3.4 आगे

पायथन 3.3 वेनव मॉड्यूल को जोड़ता है , और पायथन 3.4 सुनिश्चितप मॉड्यूल को जोड़ता है । यह बूटस्ट्रैपिंग पाइप को आसान बनाता है:

अजगर-मी सुनिश्चित

शायद venvएक आभासी वातावरण के अंदर ऐसा करने के लिए एक कॉल से पहले ।

गारंटी पाइप PEP 453 में वर्णित है ।


10

उबंटू पर:

sudo apt-get install python-virtualenv

पैकेज python-pipएक निर्भरता है, इसलिए इसे भी स्थापित किया जाएगा।


1
python-virtualenv, virtualenv और pip दोनों को स्थापित करेगा। उसके बाद सिर्फ पायथन वर्चुअल वातावरण बनाने के लिए virtualenv चलाएं। और अन्य पैकेजों को स्थापित करने के लिए वर्चुअल एनवी के भीतर से पाइप चलाएं।
जेमेषु

2
यह वास्तव में सबसे अच्छा विकल्प है। आपके ओएस में चीजों को स्थापित करने का "उचित" तरीका आपके ओएस इंस्टॉलर सिस्टम का उपयोग करना है ! उसके बाद आप के साथ खेल सकते pip, अधिमानतः एक में virtualenv, और कभी नहीं का उपयोग sudoया तो के लिए
MestreLion

दुर्भाग्य से, ओएस के प्रदान किए गए संस्करणों में pipकभी-कभी महत्वपूर्ण कीड़े होते हैं, इसलिए मैं अक्सर get-pip.pypython.org पर दिए गए उपयोग का उपयोग करता हूं।
रिचवेल

@RichVel आपके द्वारा सामना किए गए महत्वपूर्ण बगों पर विस्तार से बता सकता है?
डेनियलपॉप्स

1
@danielpops - एक उदाहरण उबंटू 16.04.1 पर यह पाइप मुद्दा है , लेकिन कुछ संस्करणों और उपयोग मामलों के साथ अन्य मुद्दे हो सकते हैं।
रिचवेल

5

मैंने इस प्रक्रिया को काम में उपयोग करने के लिए बनाया है।

cd ~
curl -s https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz
cd pip-1.3.1
python setup.py install --user
cd ~
rm -rf pip-1.3.1

$HOME/.local/bin/pip install --user --upgrade pip distribute virtualenvwrapper

# Might want these three in your .bashrc
export PATH=$PATH:$HOME/.local/bin
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS="--distribute"
source $HOME/.local/bin/virtualenvwrapper.sh

mkvirtualenv mypy
workon mypy
pip install --upgrade distribute
pip install pudb # Or whatever other nice package you might want.

सुरक्षा दिमाग के लिए मुख्य बिंदु:

  1. कर्ल ssl सत्यापन करता है। भूल नहीं करता
  2. पाइप 1.3.1 से शुरू, पाइप भी एसएलएस सत्यापन करता है।
  3. कम उपयोगकर्ता पीपा टारबॉल को जीथब टार्बॉल की तुलना में अपलोड कर सकते हैं।

5

अद्यतन: जुलाई २०१३ तक यह परियोजना अब नहीं कायम है। लेखक pyenv का उपयोग करने का सुझाव देता है । (pyenv के पास virtualenv के लिए अंतर्निहित समर्थन नहीं है, लेकिन इसके साथ अच्छा खेलता है।)

Pythonbrew अजगर के लिए एक संस्करण प्रबंधक है और virtualenv के लिए समर्थन के साथ आता है।

अजगर का उपयोग करने के बाद और वेनव्स का उपयोग करते हुए एक अजगर-संस्करण वास्तव में आसान है:

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle

@ kermit666 धन्यवाद। मेरे उत्तर को पुराने के रूप में चिह्नित करने का पसंदीदा तरीका क्या होगा? बस इसे हटा दें?
कियोपी

1
ठीक है, आप या तो इसे छोड़ सकते हैं के रूप में यह है (ऐसे लोग हैं जो मेरी टिप्पणी है, जो pythonbrew अवधारणा में इसी तरह की है कि आप की सिफारिश कर रहे हैं से लिंक का पालन के लिए pyenv का उपयोग करने पर निर्देश दिए गए हैं) या बेहतर अभी तक संपादित साथ जैसे जवाब अद्यतन सितम्बर 2013 से नए निर्देशों को लागू करना। शायद pythonbrew भविष्य में एक बार फिर से सक्रिय हो जाएगा, इसलिए मैं आपके पुराने निर्देशों को नहीं हटाऊंगा। अधिक जानकारी के लिए मेटा देखें ।
मेटाकारिट

इसके बारे में मेरा जवाब देखें pyenv, जो अच्छी तरह से काम करता है।
रिचवेल

3

Sudo python setup.py स्थापित करने के लिए कोई समस्या नहीं है, यदि आप सुनिश्चित हैं कि यह वही है जो आप करना चाहते हैं।

अंतर यह है कि यह आपके ओएस की साइट-संकुल निर्देशिका का उपयोग करेगा .py फ़ाइलों की प्रतिलिपि बनाने के लिए एक गंतव्य के रूप में।

इसलिए, यदि आप चाहते हैं कि पाइप सुलभ ओएस चौड़ा हो, तो शायद जाने का रास्ता है। मैं यह नहीं कहता कि अन्य तरीके खराब हैं, लेकिन यह संभवतः काफी उचित है।


1
हां, मैंने इसका इस्तेमाल किया। और कुछ समय बाद, आह्वान pip freezeने मुझे लगभग स्थिर कर दिया - संकुल की सूची, स्थापित किया जा रहा सिस्टम चौड़ा बहुत लंबा था। तब से, मैं दृढ़ता से "नो सूडो" और "नो ओएस-वाइड" अजगर पैकेज स्थापना का उपयोग करने की सलाह देता हूं।
जन वल्किंस्की


2

मैं हाल ही में उसी समस्या को लेकर आया था। मैं "हमेशा एक virtualenv" मानसिकता का उपयोग करने के लिए और अधिक आंशिक होता जा रहा हूं, इसलिए मेरी समस्या अपने वैश्विक या उपयोगकर्ता साइट-पैकेज निर्देशिका को वितरित किए बिना पाइप के साथ virtualenv को स्थापित करने की थी। ऐसा करने के लिए, मैंने मैन्युअल रूप से वितरित, पाइप और वर्चुअनल को डाउनलोड किया, और हर एक के लिए मैंने "पायथन सेटअपहोमोक्स्ट इंस्टॉल किया है --prefix ~ / .local / python-private" (PYTHONPOSH की अस्थायी सेटिंग के साथ = ~ / .local / अजगर-निजी) ताकि सेटअप स्क्रिप्ट वितरित करने में सक्षम हो)। मैंने अपने पीएटीएच पर एक और निर्देशिका के लिए वर्चुअन स्क्रिप्ट को स्थानांतरित कर दिया है और इसे संपादित किया है ताकि डिस्ट्रीब्यूशन और वर्चुअनव मॉड्यूल को sys.path पर पाया जा सके। टाडा: मैंने / usr, / usr / स्थानीय या मेरे उपयोगकर्ता साइट-संकुल dir में कुछ भी स्थापित नहीं किया, लेकिन मैं virtualenv को कहीं भी चला सकता हूं, और उस virtualenv में मुझे पाइप मिलता है।



2

मैं विभिन्न समस्याओं (नीचे देखें) उन्नत एसएसएल मॉड्यूल स्थापित कर रहा हूं, यहां तक ​​कि एक वर्चुअनव्यू के अंदर, पुराने ओएस प्रदान पायथन संस्करणों के शीर्ष पर, इसलिए मैं अब उपयोग करता हूं pyenv

pyenv नए पायथन संस्करणों को स्थापित करना बहुत आसान बनाता है और virtualenvs का समर्थन करता है। शुरू हो रही है virtualenv के लिए अन्य जवाबों में सूचीबद्ध व्यंजनों की तुलना में बहुत आसान है:

  • मैक पर, टाइप करें brew install pyenvऔर लिनक्स पर, pyenv- इंस्टॉलर का उपयोग करें
  • यह आपको अंतर्निहित virtualenv समर्थन के साथ-साथ पायथन संस्करण स्विचिंग (यदि आवश्यक हो) हो जाता है
  • अजगर 2 या 3 के साथ अच्छी तरह से काम करता है, एक ही बार में कई संस्करण स्थापित हो सकते हैं

सिस्टम पायथन से "नए पायथन" संस्करण और वर्चुअनव को इंसुलेट करने के लिए यह बहुत अच्छा काम करता है। क्योंकि आप आसानी से एक और हाल ही में पायथन (2.7.9 पोस्ट) का उपयोग कर सकते हैं, एसएसएल मॉड्यूल पहले से ही उन्नत हैं, और निश्चित रूप से किसी भी आधुनिक वर्चस्व सेटअप की तरह आप सिस्टम पायथन मॉड्यूल से अछूते हैं।

कुछ अच्छे ट्यूटोरियल:

pyenv-virtualenvप्रकार - प्लगइन अब में बनाया गया है pyenv commands | grep virtualenvकी जाँच करने के। मैं शुरू करने के लिए pyenv-virtualenvwrapper प्लगइन का उपयोग नहीं करूंगा - देखें कि आप कैसे pyenv-virtualenv के साथ मिलते हैं जो कि pyenv में अधिक एकीकृत है, क्योंकि यह अधिकांश virtualenvwrapper करता है।

pyenvपर बनाया गया है rbenv(रूबी संस्करण स्विचिंग के लिए एक अच्छा उपकरण) और इसकी एकमात्र निर्भरता बैश है।

  • pyenv बहुत समान नाम से असंबंधित है pyvenv- यह एक virtualenv समतुल्य है जो हाल के पायथन 3 संस्करणों का हिस्सा है, और पायथन संस्करण स्विचिंग को हैंडल नहीं करता है

चेतावनियां

पाइनेव के बारे में दो चेतावनी:

  1. यह केवल एक बैश या इसी तरह के शेल से काम करता है - या अधिक विशेष रूप से, pyenv-virtualenv प्लगइन पसंद नहीं करता है dash, जो /bin/shउबंटू या डेबियन पर है।
  2. इसे एक इंटरेक्टिव लॉगइन शेल (जैसे bash --loginटर्मिनल का उपयोग करके) से चलाया जाना चाहिए , जो ऑटोमेशन टूल जैसे कि एन्सिबल के साथ प्राप्त करना हमेशा आसान नहीं होता है ।

इसलिए pyenv इंटरेक्टिव उपयोग के लिए सबसे अच्छा है, और स्क्रिप्टिंग सर्वर के लिए कम अच्छा है।

एसएसएल मॉड्यूल समस्याएं

उपयोग करने का एक कारण यह pyenvहै कि पुराने सिस्टम द्वारा प्रदान किए गए पायथन संस्करणों का उपयोग करते समय अक्सर पायथन एसएसएल मॉड्यूल को अपग्रेड करने में समस्याएं होती हैं:


2
  • आप अजगर में कुछ भी स्थापित किए बिना ऐसा कर सकते हैं।

  • आपको sudo या किसी विशेषाधिकार की आवश्यकता नहीं है।

  • आपको virtualenvटार फ़ाइल का नवीनतम संस्करण खोजने की आवश्यकता नहीं है

  • चीजों को अप-टू-डेट रखने के लिए आपको बैश स्क्रिप्ट में संस्करण जानकारी संपादित करने की आवश्यकता नहीं है।

  • आपको curl/ wgetया tarस्थापित करने की आवश्यकता नहीं है, न ही pipयाeasy_install

  • यह 2.7 के साथ-साथ 3.X के लिए भी काम करता है

निम्नलिखित को सहेजें /tmp/initvenv.py:

से भविष्य आयात print_function

import os, sys, shutil, tempfile, subprocess, tarfile, hashlib

try:
    from urllib2 import urlopen
except ImportError:
    from urllib.request import urlopen

tmp_dir = tempfile.mkdtemp(prefix='initvenv_')
try:
    # read the latest version from PyPI
    f = urlopen("https://pypi.python.org/pypi/virtualenv/")
    # retrieve the .tar.gz file
    tar_found = False
    url = None
    sha256 = None
    for line in f.read().splitlines():
        if isinstance(line, bytes):
            line = line.decode('utf-8')
        if tar_found:
            if 'sha256' in line:
                sha256 = line.split('data-clipboard-text')[1].split('"')[1]
                break
            continue
        if not tar_found and 'tar.gz">' not in line:
            continue
        tar_found = True
        for url in line.split('"'):
            if url.startswith('https'):
                break
    else:
        print('tar.gz not found')
        sys.exit(1)
    file_name = url.rsplit('/', 1)[1]
    print(file_name)
    os.chdir(tmp_dir)
    data = urlopen(url).read()
    data_sha256 = hashlib.sha256(data).hexdigest()
    if sha256 != data_sha256:
        print('sha256 not correct')
        print(sha256)
        print(data_sha256)
        sys.exit(1)
    with open(file_name, 'wb') as fp:
        fp.write(data)
    tar = tarfile.open(file_name)
    tar.extractall()
    tar.close()
    os.chdir(file_name.replace('.tar.gz', ''))
    print(subprocess.check_output([sys.executable, 'virtualenv.py'] +
                                  [sys.argv[1]]).decode('utf-8'), end='')
    if len(sys.argv) > 2:
        print(subprocess.check_output([
            os.path.join(sys.argv[1], 'bin', 'pip'), 'install', 'virtualenv'] +

            sys.argv[2:]).decode('utf-8'), end='')
except:
    raise
finally:
    shutil.rmtree(tmp_dir)  # always clean up

और इसका उपयोग करें

python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]

उदाहरण के लिए (यदि आपको वास्तव में distributeसंगतता परत की आवश्यकता है setuptools)

python /tmp/initvenv.py venv distribute

कृपया ध्यान दें कि पुराने अजगर संस्करणों के साथ, यह आपको InsecurePlatformWarnings older दे सकता है ।

एक बार जब आप अपने virtualenv (नाम जैसे venv) आप virtualenvबस स्थापित का उपयोग करके एक और virtualenv सेटअप कर सकते हैं :

venv/bin/virtualenv venv2

virtualenvwrapper

मैं एक समय सेटअप के बाद virtualenvwrapper को देखने की सलाह देता हूं :

% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper

और सक्रियण (आपकी लॉगिन स्क्रिप्ट से किया जा सकता है):

% source venv/bin/virtualenvwrapper.sh

आप निम्न कार्य कर सकते हैं:

% mktmpenv 
New python executable in tmp-17bdc3054a46b2b/bin/python
Installing setuptools, pip, wheel...done.
This is a temporary environment. It will be deleted when you run 'deactivate'.
(tmp-17bdc3054a46b2b)% 

Found मुझे चेतावनी को दबाने का कोई तरीका नहीं मिला है। इसे pipऔर / या में हल किया जा सकता है request, लेकिन डेवलपर्स कारण के रूप में एक दूसरे को इंगित करते हैं। मुझे अक्सर गैर-यथार्थवादी मिला, मैं नवीनतम संस्करण का उपयोग करने वाले अजगर संस्करण को अपग्रेड करने की सिफारिश कर रहा था। मुझे यकीन है कि यह मेरे लिनक्स मिंट 17 इंस्टाल जैसे टूट जाएगा। सौभाग्य से pipपैकेजों को कैश करता है, इसलिए प्रति पैकेज केवल एक बार चेतावनी दी जाती है।


चेतावनी InsecurePlatformWarning(यानी चेतावनी अगर Python संस्करण 2.7.9 से अधिक पुरानी है) PyPI से अतिरिक्त पैकेज pyopenssl, pyasn1, ndg-httpsclient स्थापित करके तय की जा सकती है। (यह SSL के लिए समर्थन है, प्रमाण पत्र डिकोडिंग, PyOpenSSL के माध्यम से https।) सही प्रोटोकॉल के बिना यह वास्तव में किसी भी कोड को डाउनलोड करने और चलाने के लिए पर्याप्त सुरक्षित नहीं है।
हाइनेसर

@hynekcer मैं कोशिश करूँगा। मैं खुद से पूछता हूं कि उपयुक्त और पुराने संस्करणों के लिए पाइप और / या अनुरोध उन पैकेजों पर निर्भर क्यों नहीं किए जाते हैं।
एंथन

0

वर्चुअनव आधिकारिक साइट पर अच्छे निर्देश हैं। https://pypi.python.org/pypi/virtualenv

मूल रूप से मैंने जो किया, उसके pipसाथ स्थापित किया गया sudo easy_install pip, फिर उपयोग किया गया, फिर sudo pip install virtualenvइसके साथ एक वातावरण बनाया: virtualenv my_env(नाम जो आप चाहते हैं), उसके बाद मैंने किया virtualenv --distribute my_env:; जो स्थापित distributeऔर pipमेरे virtualenv में।

फिर से, virtualenvपृष्ठ पर दिए गए निर्देश का पालन करें ।

एक परेशानी का प्रकार, रूबी से आ रही है; पी


0

यहां virtualenvwrapper ( इस का अद्यतन ) स्थापित करने का एक अच्छा तरीका है ।

डाउनलोड virtualenv-1.11.4 (आप यहां नवीनतम पा सकते हैं ), इसे खोलना, खोलेंterminal

# Create a bootstrapenv and activate it:
$ cd ~
$ python <path to unzipped folder>/virtualenv.py bootstrapenv
$ source bootstrapenv/bin/activate

# Install virtualenvwrapper:
$ pip install virtualenvwrapper
$ mkdir -p ~/bootstrapenv/Envs

# append it to file `.bashrc`
$ vi ~/.bashrc
  source ~/bootstrapenv/bin/activate
  export WORKON_HOME=~/bootstrapenv/Envs
  source ~/bootstrapenv/bin/virtualenvwrapper.sh

# run it now.
$ source ~/.bashrc

यही है, अब आप उपयोग कर सकते हैं mkvirtualenv env1,lsvirtualenv ..etc

नोट: आप हटा सकते हैं virtualenv-1.11.4और virtualenv-1.11.4.zipडाउनलोड फ़ोल्डरों से।


0

अच्छी खबर यह है कि यदि आपने python3.4 स्थापित किया है, तो pyvenv पहले से ही स्थापित है। बस ऐसे

pyvenv project_dir
source project_dir/bin/activate
python --version   
python 3.4.*

अब इस आभासी एनवी में, आप इस परियोजना के लिए मॉड्यूल स्थापित करने के लिए पाइप का उपयोग कर सकते हैं।

इस आभासी एनवी को छोड़ दें, बस

deactivate
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.