एक और मशीन पर पायथन काम के माहौल को कैसे क्लोन करें?


26

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

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

तो, मेरा प्रश्न यह है कि ऐसा वातावरण दिया जाए जहां एक निश्चित कार्यक्रम अच्छा चलता हो, मैं इसे दूसरे से कैसे जोड़ सकता हूं जहां इसे अच्छी तरह से चलाना चाहिए? बेशक, पूर्ण प्रणाली के क्लोनिंग के बिना;)


कोंडा एनवी निर्यात का उपयोग करें।
kbrose

जवाबों:


39

सबसे पहले यह एक पायथन / एनाकोंडा सवाल है और शायद एक अलग स्टैक एक्सचेंज स्यूसैट में पूछा जाना चाहिए।


इस सवाल के लिए ही - आप अपने एनाकोंडा पर्यावरण का उपयोग कर निर्यात कर सकते हैं:

conda env export > environment.yml

और इसका उपयोग करके इसे पुनः बनाएँ:

conda env create -f environment.yml

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

एनाकोंडा में एक आभासी वातावरण बनाने के लिए आप इसका उपयोग कर सकते हैं:

conda create -n yourenvname python=x.x anaconda

जिसे आप उपयोग करके सक्रिय करते हैं:

source activate yourenvname

एनाकोंडा दस्तावेज़ीकरण का उपयोग करने conda createया conda env createपर्यावरण को साझा / पुन: उपयोग करने के लिए वेदर पर बहुत स्पष्ट नहीं है। क्या आप conda env createइस बारे में विस्तार से बता सकते हैं कि आप इस स्थिति में उपयोग करने की सलाह क्यों देते हैं ?
टंगुई

आप यहाँ conda createऔर इसके बीच के अंतर के बारे में कुछ नोट पा सकते हैं conda env create: group.google.com/a/continuum.io/forum/&topic/conda/… इसने कहा, मुझे लगता है कि आप आमतौर पर इनका उपयोग कर सकते हैं।
ginge

1
मैंने इस धागे को देखा है, लेकिन ठीक-ठीक यह समझने की कोशिश कर रहा हूं कि किस स्थिति में प्रत्येक विकल्प ( conda createबनाम conda env create) को प्राथमिकता दी जानी चाहिए और प्रत्येक के डाउनसाइड क्या हैं (जैसे: "[ conda env createके लिए] वातावरण जिसमें पाइप का उपयोग करके पैकेज स्थापित किए गए हैं , जो अतिरिक्त जटिलता का कारण बनता है ": यह किस प्रकार की अतिरिक्त जटिलता को जोड़ता है?)।
टंगुई

मैं पूछना चाहता हूं कि दौड़ते समय conda env create -f environment.yml, यह त्रुटि पैदा करेगा क्योंकि yml फ़ाइल में कुंवारी का नाम पहले से ही उपयोग किया गया है। दूर करने के लिए अपने नए कुंवारी का नाम बदलें।
गियांग गुयेन

इस तरह से बचती है आपकी जान! यदि आप एनाकोंडा मैनेजिंग एन्वायरमेंट पेज निर्देशों के आधार पर एक फ़ाइल से एक वातावरण बनाते हैं, तो आप किसी अन्य प्लेटफ़ॉर्म का उपयोग करने पर काम नहीं करते हैं। conda list --explicit > FILE_NAMEवर्तमान प्लेटफ़ॉर्म के लिए बायनेरिज़ निर्यात करता है और जाहिरा तौर पर दूसरे पर काम नहीं करता है।
शयन अमानी

5

'कंटेनरों' में देखें, उदाहरण के लिए डॉकर ( https://www.docker.com/what-container ), जो वर्चुअलाइजेशन के लिए एक अधिक हल्का विकल्प है।

इसमें कुछ समय के निवेश की आवश्यकता होगी लेकिन अंत में कई लाभ मिलेंगे।

लिंक से, जहां मैंने बोल्ड इटैलिक में आपकी विशिष्ट आवश्यकता को चिह्नित किया था :

विकास, शिपमेंट और तैनाती के लिए मानकीकृत इकाइयों में पैकेज सॉफ्टवेयर

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


5

आपके वर्तमान कोंडा पर्यावरण का पहला निर्यात पर्यावरण विन्यास:

conda-env  export -n your_env_name > your_env_name.yml

उदाहरण:

conda-env  export -n base> base.yml

कमांड से ऊपर चलने के बाद, उन्हें आपकी वर्तमान निर्देशिका में yml कॉन्फ़िगरेशन फ़ाइल होनी चाहिए जिसमें आपके conda वातावरण की जानकारी हो

Yml कॉन्फ़िगरेशन फ़ाइल रन का उपयोग करके नया वातावरण बनाने के लिए:

conda-env create -n new_env -f=\path\to\base.yml 

उदाहरण:

conda-env create -n venv -f=base.yml

यदि उपरोक्त कोई काम नहीं करता है (स्वयं कोंडा के विभिन्न मुद्दों के कारण), तो यह हमेशा निम्न भिन्नता के साथ एक कोशिश के लायक है:

conda-env create --name new_env --file \path\to\base.yml 

4

यदि आपका कार्यक्रम ज्यादातर पायथन है, तो आप पूरी तरह से आभासी वातावरण पर भरोसा कर सकते हैं।

सिस्टम लाइब्रेरी का उपयोग करने के बजाय अपनी निर्भरता को अलग करने के लिए आभासी वातावरण बनाएं। फिर अपने वातावरण को डुप्लिकेट करने के लिए वर्चुअल पर्यावरण उपकरणों का उपयोग करें।

कार्यशील वर्चुअन में, प्रत्येक स्थापित पायथन लाइब्रेरी के संस्करण के साथ एक फ़ाइल बनाएं:

pip freeze > requirements.txt

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

pip install -r requirements.txt

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

बेशक, अगर आपको एक डेटाबेस, एक प्रोडक्शन वेब सर्वर आदि की आवश्यकता है, तो आप कुछ और चरणों के साथ समाप्त हो जाते हैं और दोनों वातावरण मैच सुनिश्चित करने के लिए आप virtualenv पर भरोसा नहीं कर सकते। यह वह जगह है जहाँ डॉकर ( Pieter21 का जवाब देखें ) में कदम रखता है


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

1

इस दस्तावेज़ पृष्ठ के बहुत अंत से :

भविष्य के उपयोग के लिए पैकेज सहेजें:

conda list --export > package-list.txt

निर्यात फ़ाइल से संकुल को पुनर्स्थापित करें:

conda create -n myenv --file package-list.txt

1

एक और के आधार पर एक वातावरण बनाने के लिए मौजूदा तरीकों का एक आवरण:

  • एक पर्यावरण क्लोनिंग :

    • मौजूदा माहौल से:

      $ conda create --name ORIG_ENV_NAME --clone CLONE_ENV_NAME

    • एक ही मशीन पर एक निर्यात पर्यावरण फ़ाइल से:

      $ conda create --name ENV_NAME —-file FILE_NAME.yml

    • एक अलग मशीन पर एक निर्यात पर्यावरण फ़ाइल से:
      $ conda env export > ENV_NAME.yml
      $ conda env create -f ENV_NAME.yml```

$ conda create --name NEW_ENV_NAME --clone ORIG_ENV_NAME
बी। सन

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