2012-04-18 14 views
115

में पायथन को अपग्रेड करें वर्चुअलएन्व में उपयोग किए गए पायथन के संस्करण को अपग्रेड करने का कोई तरीका है (उदाहरण के लिए यदि कोई बगफिक्स रिलीज़ आती है)?वर्चुअलनव

मैं pip freeze --local > requirements.txt कर सकता था, फिर निर्देशिका और pip install -r requirements.txt हटा सकता हूं, लेकिन इसके लिए बड़ी पुस्तकालयों की बहुत सारी पुनर्स्थापना की आवश्यकता होती है, उदाहरण के लिए, numpy, जिसका मैं बहुत उपयोग करता हूं।

मैं देख सकता हूं कि यह एक लाभ है, उदाहरण के लिए, 2.6 -> 2.7, लेकिन 2.7.x -> 2.7.y के बारे में क्या?

+1

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

+0

@ सिमॉन वाकर। बिल्कुल एक ही समस्या है। मुझे एक बग फिक्स के लिए पायथन 3.5.3 अपग्रेड करना होगा। –

उत्तर

49

क्या आपको this देखा गया था? अगर मैंने उस उत्तर को गलत समझा नहीं है, तो आप पुराने के शीर्ष पर एक नया वर्चुअलनव बनाने की कोशिश कर सकते हैं। आपको बस यह जानने की जरूरत है कि कौन सा पायथन आपके वर्चुअलएन्व का उपयोग करने जा रहा है (आपको अपना वर्चुअलएवी संस्करण देखना होगा)।

अपने virtualenv पुराने का एक ही अजगर संस्करण के साथ स्थापित किया गया है और अपने virtualenv पैकेज उन्नयन एक विकल्प नहीं है, तो आप आदेश अजगर संस्करण आप चाहते हैं के साथ एक virtualenv स्थापित करने के लिए में this से पढ़ सकते हैं।

संपादित

मैं इस दृष्टिकोण (एक है कि पुराने एक के ऊपर एक नया virtualenv बनाने) परीक्षण किया है और यह मेरे लिए ठीक काम किया। मुझे लगता है कि यदि आप Python 2.6 से 2.7 या 2.7 से 3.x में बदलते हैं तो आपको कुछ समस्याएं हो सकती हैं, लेकिन अगर आप एक ही संस्करण के अंदर अपग्रेड करते हैं (2.7 पर रहना चाहते हैं) तो आपको कोई समस्या नहीं होनी चाहिए, क्योंकि सभी पैकेज दोनों पायथन संस्करणों (2.7.x और 2.7.y पैकेज के लिए एक ही फ़ोल्डर में आयोजित होते हैं आपके_एनवी/lib/python2.7 /) के अंदर हैं।

यदि आप अपना वर्चुअलएनवी पायथन संस्करण बदलते हैं, तो आपको उस संस्करण के लिए अपने सभी पैकेज फिर से स्थापित करने की आवश्यकता होगी (या केवल नए संस्करण पैकेज फ़ोल्डर में आवश्यक संकुल को लिंक करें, यानी: your_env/lib/python_newversion/site-packages)

+6

यदि संभव हो तो वह विशेष रूप से किसी भी पैकेज को पुनर्स्थापित नहीं करना चाहता था। जाहिर है, आपने कभी स्रोत से numpy इंस्टॉल नहीं किया है अगर आपको नहीं पता कि यह क्यों मायने रखता है;) संकेत: यह एक लूOOOOOOOOOOOONG समय लेता है। –

+0

हाँ, मैं समझता हूं। लेकिन ऐसा लगता है कि अगर वह दूसरे के शीर्ष पर वर्चुअलएन्व बनाते हैं, तो पैकेज खो नहीं जाते हैं, इसलिए उन्हें numpy या किसी अन्य पैकेज को पुनर्स्थापित करने की आवश्यकता नहीं होगी। फिर भी, मुझे लगता है कि अगर यह विफल रहता है तो उसे इसे एक नए वर्चुअलनेव में आज़माएं। – marianobianchi

+0

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

18

फिर से अपडेट किया गया: निम्न विधि virtualenv के नए संस्करण में काम न करे। पुराने वर्चुअलएन्व में संशोधन करने का प्रयास करने से पहले, आपको निर्भरता को एक आवश्यकता फ़ाइल (pip freeze > requirements.txt) में सहेजना चाहिए और कहीं और इसका बैकअप बनाना चाहिए। अगर कुछ भी गलत हो जाता है, तो भी आप एक नया वर्चुअलनव बना सकते हैं और इसमें पुरानी निर्भरताओं को स्थापित कर सकते हैं (pip install -r requirements.txt)।

अपडेट किया गया: मैं इस सवाल का जवाब 5 महीने के बाद मैं मूल रूप से उत्तर दिया बदल दिया है। निम्नलिखित विधि अधिक सुविधाजनक और मजबूत है।

साइड प्रभाव: यह भी Symbol not found: _SSLv2_method अपवाद को ठीक करता है जब आप v2.7.8 के लिए अजगर अपग्रेड करने के बाद एक आभासी वातावरण में import ssl है।

नोटिस: वर्तमान में, इस अजगर 2.7.x केवल के लिए है।


आप ओएस एक्स पर Homebrew अजगर का उपयोग कर रहे हैं, तो पहले deactivate सभी virtualenv, तो अजगर का उन्नयन:

brew update && brew upgrade python 

भागो निम्न कमांड (<EXISTING_ENV_PATH> अपने आभासी वातावरण का मार्ग है):

:
cd <EXISTING_ENV_PATH> 
rm .Python 
rm bin/pip{,2,2.7} 
rm bin/python{,2,2.7} 
rm -r include/python2.7 
rm lib/python2.7/* 
rm -r lib/python2.7/distutils 
rm lib/python2.7/site-packages/easy_install.* 
rm -r lib/python2.7/site-packages/pip 
rm -r lib/python2.7/site-packages/pip-*.dist-info 
rm -r lib/python2.7/site-packages/setuptools 
rm -r lib/python2.7/site-packages/setuptools-*.dist-info 

अंत में, अपने आभासी वातावरण फिर से बनाते हैं

ऐसा करके, पुराने अजगर कोर फ़ाइलों और मानक पुस्तकालयों (प्लस setuptools और pip) निकाल दिए जाते हैं, जबकि site-packages में स्थापित कस्टम पुस्तकालयों संरक्षित और काम कर रहे हैं, जैसे ही वे शुद्ध पायथन में हैं। ठीक से काम करने के लिए बाइनरी पुस्तकालयों को पुनर्स्थापित करने की आवश्यकता हो सकती है या नहीं।

यह Django स्थापित के साथ 5 वर्चुअल वातावरण पर मेरे लिए काम किया।

BTW, अगर ./manage.py compilemessages बाद में काम नहीं कर रहा है, इस प्रयास करें:

brew install gettext && brew link gettext --force 
+0

एकमात्र फ़ाइल जिसे मुझे हटाना था वह 'बिन/पायथन' फ़ाइल थी। –

+0

कुछ पुराने संस्करण पायथन के लिए, 'setuptools' और 'pip' को हटाना आवश्यक है। – Rockallite

+1

मुझे वर्चुअलनेव निर्माण को तोड़ने के साथ ही '/पायथन' को भी हटाना पड़ा। –

3

मैं पुराने एक के ऊपर एक नया virtualenv बनाने के लिए सक्षम नहीं था। लेकिन ऐसे पाइप में उपकरण हैं जो एक ब्रांड नए venv में आवश्यकताओं को फिर से स्थापित करने के लिए बहुत तेज़ बनाते हैं। पिप आपकी आवश्यकताओं में प्रत्येक आइटम को एक व्हील पैकेज में बना सकता है, और उसे स्थानीय कैश में स्टोर कर सकता है। जब आप एक नया venv बनाते हैं और इसमें पाइप इंस्टॉल करते हैं, तो पाइप स्वचालित रूप से प्रीबिल्ट व्हील का उपयोग करेगा यदि यह उन्हें पाता है। प्रत्येक मॉड्यूल के लिए setup.py चलाने से पहियों को बहुत तेज इंस्टॉल करें।

मेरे ~/.pip/pip.conf इस तरह दिखता है:

[global] 
download-cache = /Users/me/.pip/download-cache 
find-links = 
/Users/me/.pip/wheels/ 

[wheel] 
wheel-dir = /Users/me/.pip/wheels 

मैं पहिया (pip install wheel) स्थापित है, तो चलाने pip wheel -r requirements.txt। यह मेरे pip.conf में व्हील-डीआईआर में निर्मित पहियों को स्टोर करता है।

तब से, जब भी मैं इन आवश्यकताओं में से किसी एक को स्थापित करता हूं, तो यह उन्हें पहियों से स्थापित करता है, जो कि बहुत तेज़ है।

+1

ज्यादातर लोगों के लिए मुझे लगता है कि काम करने के लिए पीपी मशीनरी का उपयोग करना समझ में आता है, लेकिन किसी भी व्यक्ति के लिए जिन्होंने वर्चुअलनव्स को पुनः सक्रिय करने, पूर्ववर्ती, इत्यादि को अनुकूलित किया है, यह वांछनीय नहीं है विकल्प क्योंकि जो खो गया है और उसे मैन्युअल रूप से पढ़ा जाना है। – dpwrussell

0

मैंने अपनी होम निर्देशिका को एक मैक से दूसरे (माउंटेन शेर से योसामेट तक) स्थानांतरित कर दिया और जब तक मैं पुराने लैपटॉप को पकड़ नहीं पाया तब तक टूटी वर्चुअलेंव के बारे में नहीं पता था। मेरे पास पाइथन 2.7 को वर्चुअलएन्व पॉइंट था जो brew द्वारा स्थापित किया गया था और चूंकि योसेमेट पायथन 2.7 के साथ आया था, इसलिए मैं अपने वर्चुअलनव को सिस्टम पायथन में अपडेट करना चाहता था। जब मैं मौजूदा निर्देशिका के शीर्ष पर virtualenv चलाता था, तो मुझे OSError: [Errno 17] File exists: '/Users/hdara/bin/python2.7/lib/python2.7/config' त्रुटि मिल रही थी। परीक्षण और त्रुटि से, मैंने कुछ लिंक हटाकर और कुछ और मैन्युअल रूप से ठीक करके इस समस्या के आसपास काम किया। यह वही है मैं अंत में किया था (क्या @Rockalite किया के समान है, लेकिन सरल) है:

cd <virtualenv-root> 
rm lib/python2.7/config 
rm lib/python2.7/lib-dynload 
rm include/python2.7 
rm .Python 
cd lib/python2.7 
gfind . -type l -xtype l | while read f; do ln -s -f /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/${f#./} $f; done 

इस के बाद, मैं सिर्फ मौजूदा निर्देशिका के शीर्ष पर virtualenv चलाने के लिए सक्षम था।

31

यदि आप पायथन 3.3+ के साथ आने वाले venv मॉड्यूल का उपयोग करते हैं, तो यह --upgrade विकल्प का समर्थन करता है। प्रति docs:

अजगर के इस संस्करण का उपयोग करने के वातावरण निर्देशिका अपग्रेड, यह मानते हुए अजगर उन्नयन किया गया है यथा-स्थान

python3 -m venv --upgrade ENV_DIR 
+0

दुर्भाग्यवश, यह उबंटू 16.04 पर काम नहीं करता है, जहां उन्होंने 'venv' तोड़ दिया और इस आधार पर इसे ठीक करने से इंकार कर दिया कि "आप वर्चुअलएन्व का उपयोग कर सकते हैं"। संपादित करें: वास्तव में, यह काम करता है! यह "surepip" के बारे में एक त्रुटि संदेश भी दिखाता है। – rspeer

+0

मैंने अपने सिस्टम पर 3.5.1 से 3.6.4 तक पायथन को अपग्रेड किया। और मेरे वर्चुअलनेव पर पायथन को अपग्रेड करने के लिए, मुझे कमांड में python3.6 का स्पष्ट रूप से उल्लेख करना था: 'python3.6 -m venv --upgrade ' –

+0

'--upgrade' ध्वज मेरे अनुभव में आवश्यक नहीं है (3.5 विंडोज/गिट बैश पर 2 से 3.5.4)। –

0

एक मौजूदा virtualenvwrapper परियोजना के लिए अजगर संस्करण को अपग्रेड करने के लिए कैसे और उसी नाम को रखें

मैं डॉग हेल्मैन के उत्कृष्ट virtualenvwrapper का उपयोग करके किसी के लिए उत्तर जोड़ रहा हूं, विशेष रूप से मौजूदा उत्तरों ने मेरे लिए ऐसा नहीं किया है।

कुछ संदर्भ:

  • मैं कुछ परियोजनाओं है कि अजगर 2 होते हैं और कुछ है कि अजगर 3 रहे हैं पर काम करते हैं; जब मैं python3 -m venv उपयोग करने के लिए अच्छा लगेगा, यह अजगर का समर्थन नहीं करता 2 वातावरण
  • जब मैं एक नई परियोजना शुरू, मैं mkproject जो आभासी वातावरण पैदा उपयोग करते हैं, एक खाली परियोजना निर्देशिका बनाता है, और में यह
  • मैं सीडी हालांकि टी,

    मान लें कि आपका मौजूदा परियोजना foo नाम पर है और वर्तमान में अजगर 2 (mkproject -p python2 foo) चल रहा है दो: virtualenvwrapper के workon आदेश का उपयोग कर किसी भी परियोजना को सक्रिय करने के अजगर संस्करण पर ध्यान दिए बिना

दिशा-निर्देश जारी रखना चाहते हैं वह आदेश वही हैं जो 2.x से 3.x, 3.6.0 से 3.6.1 तक अपग्रेड कर रहे हैं। मैं यह भी मान रहा हूं कि आप वर्तमान में सक्रिय वर्चुअल वातावरण के अंदर हैं।

1. निष्क्रिय और पुराने आभासी वातावरण को दूर:

$ deactivate 
$ rmvirtualenv foo 

ध्यान दें कि आप हुक करने के लिए किसी भी कस्टम आदेशों जोड़ा हो (जैसे, bin/postactivate) आप पर्यावरण को हटाने से पहले उन को बचाने की जरूरत होगी ।

2. छिपाने की जगह एक अस्थायी निर्देशिका में वास्तविक परियोजना:

$ cd .. 
$ mv foo foo-tmp 

3. नया आभासी पर्यावरण (और परियोजना dir) बनाएँ और सक्रिय करें:

$ mkproject -p python3 foo 

4. खाली उत्पन्न बदलें वास्तविक परियोजना के साथ परियोजना dir, परियोजना dir में वापस बदल:

$ cd .. 
$ mv -f foo-tmp foo 
$ cdproject 

5. पुन: इंस्टॉल निर्भरता, ग onfirm नई पायथन संस्करण, आदि:

$ pip install -r requirements.txt 
$ python --version 

यह एक आम उपयोग है, मैं की तरह $ upgradevirtualenv/$ upgradeproject virtualenvwrapper के लिए कुछ जोड़ने के लिए एक पीआर खोलने पर विचार करेंगे।

0

मैं सिर्फ स्पष्टीकरण देना चाहता हूं, क्योंकि कुछ उत्तरों में venv का संदर्भ है और अन्य वर्चुअलएन्व का संदर्भ लेते हैं। -p या --python ध्वज का उपयोग वर्चुअलएन्व पर समर्थित है, लेकिन venv पर नहीं।यदि आपके पास एक से अधिक पायथन संस्करण हैं और आप यह निर्दिष्ट करना चाहते हैं कि किसके साथ venv बनाने के लिए, इसे कमांड लाइन पर करें, जैसे: malikarumi @ Tetuoan2: ~/प्रोजेक्ट्स $ python3.6 -m venv/path- मौजूदा डीआईआर आप

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

0

ओएस एक्स या मैकोज़ पर होमब्री का उपयोग करके Python3 को स्थापित और अपग्रेड करने के लिए मुझे python -m venv --upgrade ENV_DIR काम करने से पहले प्रतीकात्मक लिंक हटाना पड़ा।

brew upgrade python3 
find ~/.virtualenvs/ -type l -delete 
find ~/.virtualenvs/ -type d -mindepth 1 -maxdepth 1 -exec python3 -m venv --upgrade "{}" \; 

अद्यतन: जबकि इस पहली बार में अच्छी तरह से काम करने के लिए, जब मैं py भाग गया लग रहा था

मैं upgrade_python3.sh में निम्नलिखित इसलिए मुझे याद है कि कैसे अब से महीने जब मैं इसे फिर से करने की जरूरत है बचाया .test यह एक त्रुटि दे दी। अंत में मैंने सिर्फ एक आवश्यकता फ़ाइल से पर्यावरण को फिर से बनाया।

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