Virtualenv डुप्लिकेट कैसे करें


130

मेरे पास बहुत सारे पैकेज के साथ एक मौजूदा वर्चुअन है, लेकिन Django का एक पुराना संस्करण।

मैं जो करना चाहता हूं, वह इस वातावरण की नकल कर रहा है, इसलिए मेरे पास एक ही वातावरण है जिसमें सटीक समान पैकेज हैं लेकिन Django का एक नया संस्करण है। मैं यह कैसे कर सकता हूँ?


3
मैं आपकी सभी आवश्यकताओं को एक 'आवश्यकताओं' txt फ़ाइल में फ्रीज कर दूंगा और एक और virtualenv बनाऊंगा और पाइप इंस्टॉल आवश्यकताओं को पूरा करूँगा ।xt
केल्विन चेंग

यदि आप जिस वर्चुअल वातावरण को कॉपी करना चाहते हैं उसका अजगर संस्करण आपके डिफ़ॉल्ट पायथन परिवेश से अलग है, तो आप नए वातावरण को इस प्रकार सेट कर सकते हैं virtualenv -p /path/to/older/venv/bin/python new_venvऔर उसके requirements.txtबाद आपके द्वारा जनरेट किए गए का उपयोग कर सकते हैंpip freeze
GiriB

जवाबों:


183

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

एक आवश्यकताएँ फ़ाइल बनाने के लिए, अपने मूल virtualenv में जाएँ, और चलाएँ:

pip freeze > requirements.txt

यह आपके लिए आवश्यकताओं को उत्पन्न करेगा । यदि आप अपने पसंदीदा पाठ संपादक में उस फ़ाइल को खोलते हैं, तो आपको कुछ इस तरह दिखाई देगा:

Django==1.3
Fabric==1.0.1
etc...

अब, उस पंक्ति को संपादित करें जो Django==x.xकहने के लिए कहता है Django==1.3(या जो भी संस्करण आप अपने नए वर्चस्व में स्थापित करना चाहते हैं)।

अंत में, अपने नए virtualenv को सक्रिय करें , और चलाएं:

pip install -r requirements.txt

और पाइप स्वचालित रूप से आपकी आवश्यकताओं में सूचीबद्ध सभी अजगर मॉड्यूल को डाउनलोड करेगा और इंस्टॉल करेगा ।


3
धन्यवाद! गुगली करते समय मुझे इतने शोर, गन्दे और भ्रमित करने वाले पृष्ठ मिले ... आपका समाधान इतना साफ और सरल है ... इसने मेरा दिन बना दिया;)
dolma33

क्या होगा अगर मैं फ़ोल्डर की प्रतिलिपि बनाता हूं और फिर इसे किसी अन्य मशीन पर पेस्ट करता हूं? यह काम करेगा? निश्चित रूप से उपयुक्त-निर्भरता का समाधान किया गया
पडुआ

वास्तव में ऐसा नहीं है, जैसा कि मैं अभी पता लगा रहा हूं।
क्षितिज_बज़ जूल

मुझे कई संदेश दिखाई देते हैं Could not find a version that satisfies the requirement a_package=#.#.#क्या मैं इसे आसानी से हल कर सकता हूं? मैंने एक पंक्ति को हटा दिया या असमानता में समानता को बदल दिया।
चेंज-

pyenvसाथ ही काम करता है । बहुत बढ़िया जवाब।
लियोनार्ड

29

एक अन्य विकल्प virtualenv-cloneपैकेज का उपयोग करना है:

नॉन-रिलोकिटेबल वर्चुअन क्लोनिंग के लिए एक स्क्रिप्ट।


नमस्ते, मुझे यह मान लेना सही है कि यह मुझे एक फ़ाइल में WHOLE अजगर पर्यावरण की नकल करने की अनुमति देता है। तब मुझे बस इस फाइल को एक नए कंप्यूटर / OS में लोड करना होगा और मुझे अपने सभी साइट पैकेज वापस मिल जाएंगे
aceminer

2
"virtualenv- क्लोन स्रोत / लक्ष्य /" एक आकर्षण की तरह काम किया धन्यवाद!
अंजानकुव

सुनिश्चित करें कि हमने virtualenv-clonevirtualenv
4givN

15

virtualenvwrappervirtualenv को डुप्लिकेट करने के लिए एक कमांड प्रदान करता है

cpvirtualenv ENVNAME [TARGETENVNAME]

7
वास्तव में एक अच्छा विचार नहीं है। "आभासी वातावरण की नकल करना अच्छी तरह से समर्थित नहीं है। प्रत्येक वर्चुअनव्यू में पथ की जानकारी को हार्ड-कोड किया गया है, और ऐसे मामले भी हो सकते हैं जहां कॉपी कोड नहीं जानता है कि उसे किसी विशेष फ़ाइल को अपडेट करने की आवश्यकता है। सावधानी के साथ उपयोग करें।"
तैमुक

5

यदि आप एनाकोंडा का उपयोग कर रहे हैं तो आप बस चला सकते हैं:

conda create --name myclone --clone myenv

यह myenvनए बनाए गए वातावरण की नकल होगी जिसे कहा जाता है myclone


4

सबसे आसान विकल्प virtualenv-cloneपैकेज का उपयोग कर रहा है।

डुप्लिकेट बनाने के लिए venv1करने के लिए venv2, निम्न चरणों का पालन करें:

  1. या virtualenv-cloneतो venv1एक डमी आभासी वातावरण में स्थापित करें venv_dummy। बनाने के लिए venv_dummy:

    python -m virtualenv venv_dummy
    source venv_dummy/bin/activate
  2. स्थापित करने के लिए virtualenv-clone:

    (venv_dummy): pip install virtualenv-clone
  3. डुप्लिकेट venv1करने के लिए venv2:

    (venv_dummy): virtualenv-clone venv1/ venv2/

बैश में शीघ्र परिवर्तन नहीं है, बिन संपादित करें / सक्रिय करना है, और 100% स्पष्ट नहीं है कि कैसे
MrR

bin/activateयदि आप इस उत्तर का पालन करते हैं तो @MrR .. आपको संपादित नहीं करना है । आपको क्यों संपादित करना है bin/activate?
सफवान

मेरे क्लोन करने के बाद, बैश में मेरे प्रॉम्प्ट का मूल वातावरण नाम था, क्योंकि PS1 सेक्शन के भीतरbin/activate
MrR

1

क्या आप बस नहीं कर सकते:

  • मौजूदा वर्चुअल एनवी डायरेक्टरी को नए सिरे से कॉपी करें
  • नए Django के लिए अद्यतन?

7
कुछ बार मैं इस दृष्टिकोण का उपयोग करता हूं, लेकिन बिन / सक्रिय स्क्रिप्ट के अंदर कुछ रास्तों को अपडेट करने की असुविधा होती है।
अरमांडो पेरेज़ मार्केस

3
क्या परिवर्तन एक सरल खोज है और इसे env नाम के संदर्भ में बदल दिया गया है, या क्या यह उससे अधिक जटिल है?
ग्रेग

1
मेरे मामले में, बस बिन / सक्रिय में VIRTUAL_ENV स्थिरांक में पथ को अद्यतन करने ने चाल
चली

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

2
यह बहुत सी चीजों को तोड़ता है। Virtualenv को फिर से बनाना या क्लोन करना आसान है। मैंने ऐसा करने की कोशिश की (जबकि एक प्रॉक्सी सर्वर के खुलने का इंतजार किया जा रहा है ताकि मैं सभी आवश्यक पैकेजों को पुनः स्थापित कर सकूं और स्क्रैच से शुरू कर सकूं), और यह काम नहीं कर रहा है! मुझे लगा कि मैं चालाक हो रहा हूं, लेकिन अफसोस, इसे पूरा करने और चलाने के लिए बहुत हैकिंग होगी, और ईमानदारी से, बहुत कुछ बेहतर करना है।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.