क्या Conda virtualenv की आवश्यकता को प्रतिस्थापित करता है?


205

मुझे हाल ही में कॉनडा की खोज के बाद मैंने साइपी को स्थापित करने में परेशानी हो रही थी, विशेष रूप से एक हरोकू ऐप पर जिसे मैं विकसित कर रहा हूं।

Conda के साथ आप वातावरण बनाते हैं, जो virtualenv के समान है। मेरे प्रश्न हैं:

  1. यदि मैं कॉनडा का उपयोग करता हूं तो क्या यह वर्चुअन की आवश्यकता को बदल देगा? यदि नहीं, तो मैं दोनों को एक साथ कैसे उपयोग करूं? क्या मैं Conen में virtualenv, या Virtualenv में Conda स्थापित कर सकता हूँ?
  2. क्या मुझे अभी भी पाइप का उपयोग करने की आवश्यकता है? यदि हां, तो क्या मैं अभी भी एक पृथक वातावरण में पाइप के साथ पैकेज स्थापित कर पाऊंगा?

आप Heroku पर conda और पिप का उपयोग करने में रुचि रखते हैं, के लिए उदाहरण देखें github.com/faph/conda-pip-buildpack
faph

धन्यवाद। मैंने देखा है कि जीथुब पर हरोकू के लिए काफी संख्या में कोंडा बिल्डपैक हैं। कौन से बिल्डपैक का उपयोग करने का निर्णय लेते समय मुझे किन कारकों को ध्यान में रखना चाहिए?
Kritz

ध्यान दें कि अगर आप सीधे कॉन्टिनम के सर्वर से उपलब्ध नहीं हैं, तो आप उन पैकेजों को स्थापित करना चाहते हैं, जो आपको सीधे इंस्टॉल करने हैं।
अली_म

हां, मैंने देखा कि वे अभी भी Django 1.8 (1.9 नहीं) पर हैं। फिलहाल मैं कोंडा का इस्तेमाल करूंगा जहां जरूरत (पपड़ी और सुन्न) और बाकी सब के लिए पाइप - लेकिन फिर भी कोंडा के भीतर।
क्रिट्ज

अधिकांश कोंडा हेरोकू बिल्डपैक की उत्पत्ति केनेथ रेइट्ज के विचार से हुई है। लोगों को उनकी पसंद के अनुरूप बनाने के लिए। बस जांचें कि क्या वे दोनों कोंडा और पाइप समर्थन को शामिल करते हैं यदि आपकी आवश्यकता है। और अगर वे environment.yml फ़ाइल का समर्थन करते हैं। आप हमेशा बिल्डपैक कोड के माध्यम से देख सकते हैं कि क्या आपको बिल्ड स्क्रिप्ट पसंद है, उदाहरण के लिए यह देखने के लिए कि वास्तव में वातावरण कैसे बनाया जाता है।
faph

जवाबों:


157
  1. कोन्डा ने वर्चस्व की जगह ले ली। मेरी राय में यह बेहतर है। यह पायथन तक ही सीमित नहीं है, बल्कि अन्य भाषाओं के लिए भी इस्तेमाल किया जा सकता है। मेरे अनुभव में यह विशेष रूप से वैज्ञानिक पैकेजों के लिए एक बहुत ही चिकनी अनुभव प्रदान करता है। पहली बार जब मैंने मायावी को ठीक से मैक पर स्थापित किया था, उसके साथ था conda

  2. आप अभी भी उपयोग कर सकते हैं pip। वास्तव में, प्रत्येक नए वातावरण में condaस्थापित pipहोता है। यह पाइप-इंस्टॉल पैकेज के बारे में जानता है।

उदाहरण के लिए:

conda list

आपके वर्तमान परिवेश में सभी स्थापित पैकेजों को सूचीबद्ध करता है। Conda- स्थापित पैकेज इस तरह दिखाई देते हैं:

sphinx_rtd_theme          0.1.7                    py35_0    defaults

और जिनके माध्यम से स्थापित pipकिया गया <pip>है:

wxpython-common           3.0.0.0                   <pip>

8
क्या एनाकोंडा वातावरण में पाइप का उपयोग करने के लिए कोई नकारात्मक है? क्या कभी ऐसा मामला है जहां आप कॉनडा के माध्यम से एक पैकेज उपलब्ध होने के बावजूद पाइप का उपयोग करना चाहेंगे?
क्लिफग्रे

अंतर हाइफ़न बनाम अंडरस्कोर है? क्या होगा अगर पैकेज का नाम न ही है? फिर अंतर कैसे करें?
टॉम हेल

1
अंडरस्कोर या हाइफ़न पैकेज नाम का हिस्सा है। इसका पाइप या कोंडा से कोई लेना-देना नहीं है। यह <pip>दिखाता है कि यह पाइप के साथ स्थापित किया गया था अन्यथा यह कोंडा के साथ स्थापित है।
माइक मुलर

4
"पाइप स्थापित पैकेजों के बारे में पता है" के साथ एक बड़ा चेतावनी है। मेरी समझ से, एक conda env अंदर, पिप स्वतंत्र रूप से, कार्य करता है तो conda स्थापना रद्द करें पिप स्थापित नहीं कर सकते हैं के लिए उदाहरण के संकुल
information_interchange

1
@clifgray - देशी साझा पुस्तकालयों वाले पाइप और कोंडा पैकेज उन लोगों के बाइनरी असंगत संस्करण स्थापित कर सकते हैं, जो मूल विश्व की सभी प्रकार की विफलताएं (सिगसेव-एस, आदि) शुरू कर देंगे। सी डिबगर के साथ गति करने के लिए किसी के लिए डिबग करना कठिन नहीं है। अजगर-केवल पैकेज के लिए समान, बस उन लोगों को समझ में आना आसान है।
बोबाह

61

संक्षिप्त उत्तर है, आपको केवल कोंडा चाहिए।

  1. Conda प्रभावी रूप से एक पैकेज में पाइप और virtualenv की कार्यक्षमता को जोड़ती है, इसलिए यदि आप conda का उपयोग कर रहे हैं, तो आपको virtualenv की आवश्यकता नहीं है।

  2. आपको आश्चर्य होगा कि कितने पैकेज का समर्थन करता है। यदि यह पर्याप्त नहीं है, तो आप कोंडा के तहत पाइप का उपयोग कर सकते हैं।

यहाँ conda पृष्ठ की एक कड़ी है conda, pip और virtualenv की तुलना:

https://docs.conda.io/projects/conda/en/latest/commands.html#conda-vs-pip-vs-virtualenv-commands


34

आभासी वातावरण और pip

मैं कहूंगा कि एनाकोंडा के साथ कॉन्डा वातावरण बनाना और हटाना सरल है।

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

> conda remove --name <envname> --all 

एक सक्रिय वातावरण में , के माध्यम से condaया स्थापित पैकेज pip:

(envname)> conda install <package>

(envname)> pip install <package>

ये वातावरण कोंडा के पाइप जैसे पैकेज प्रबंधन के लिए दृढ़ता से बंधे हुए हैं , इसलिए वातावरण बनाना और पायथन और गैर-पायथन पैकेज दोनों को स्थापित करना सरल है।


Jupyter

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

विश्वसनीयता

मेरे अनुभव में, बड़े पुस्तकालयों जैसे numpyऔर स्थापित करने में कोंडा तेज और अधिक विश्वसनीय है pandas। इसके अलावा, यदि आप अपने पर्यावरण की संरक्षित स्थिति को स्थानांतरित करना चाहते हैं, तो आप एक एनवी को साझा या क्लोन करके ऐसा कर सकते हैं ।


18

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

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

अंतर:

लाइसेंस समझौता। जबकि virtualenv अधिकांश उदार एमआईटी लाइसेंस के अंतर्गत आता है , कोनडा 3 खंड बीएसडी लाइसेंस का उपयोग करता है।

Conda आपको उनके स्वयं के पैकेज नियंत्रण प्रणाली प्रदान करता है। यह पैकेज नियंत्रण प्रणाली अक्सर लोकप्रिय गैर-पायथन सॉफ्टवेयर के पहले से तैयार किए गए संस्करण (सबसे लोकप्रिय प्रणालियों के लिए) प्रदान करती है, जो कुछ मशीन लर्निंग पैकेजों को काम करने में आसान बना सकती है। अर्थात् आपको सिस्टम के लिए अनुकूलित C / C ++ कोड संकलित करने की आवश्यकता नहीं है। जबकि यह हम में से अधिकांश के लिए एक बड़ी राहत है, यह इस तरह के पुस्तकालयों के प्रदर्शन को प्रभावित कर सकता है।

Virtualenv के विपरीत, Conda कुछ सिस्टम पुस्तकालयों को कम से कम लिनक्स सिस्टम पर दोहराता है। यह लाइब्रेरी आपके कार्यक्रमों के असंगत व्यवहार के कारण सिंक से बाहर निकल सकती है।

फैसले:

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


2
मन थोड़ा और विस्तृत क्यों "आप वितरित वातावरण या एचपीसी हार्डवेयर पर कोंडा के उपयोग से बचना चाहते हैं"? @ y.selivonchyk
ओलिवर हू

1
मैं इनमें से कुछ निष्कर्षों से असहमत हूं। "असंगत प्रोग्राम व्यवहार" condaस्थापित सॉफ़्टवेयर और लाइब्रेरीज़ का उपयोग करने के लिए अपने कार्यक्रमों को ठीक से कॉन्फ़िगर नहीं करने का एक परिणाम है । और एचपीसी में, condaकई मामलों में बेहतर होता है, वास्तव में इसका उपयोग एचपीसी एडीमिन द्वारा moduleसिस्टम जैसी चीजों को बदलने के लिए किया जा रहा है । यह उपयोगकर्ता-स्थापित सॉफ़्टवेयर और अधिक से अधिक सॉफ़्टवेयर अलगाव, एचपीसी पर दो बड़े मुद्दों की अनुमति देता है। मुझे केवल यह अनुभव होता है कि कई HPC फाइलसिस्टमों की एक dir में फाइलों की संख्या पर हार्ड-लिमिट होती है, और conda कई 1,000 फाइलों को बनाता है।
user5359531

9

मैं दोनों का उपयोग करता हूं और (जनवरी, 2020 तक) उनके पास कुछ सतही अंतर हैं जो मेरे लिए अलग-अलग उपयोगों के लिए उधार देते हैं। द्वारा डिफ़ॉल्ट Conda, एक केंद्रीय स्थान में आप के लिए वातावरण की एक सूची प्रबंधन करने के लिए पसंद करते हैं, जबकि virtualenv वर्तमान निर्देशिका में एक फ़ोल्डर बनाता है। अगर आप मशीन लर्निंग कर रहे हैं तो पूर्व (केंद्रीकृत) समझ में आता है और बस कुछ व्यापक वातावरण हैं जो आप कई परियोजनाओं में उपयोग करते हैं और कहीं से भी उनमें कूदना चाहते हैं। उत्तरार्द्ध (प्रति प्रोजेक्ट फ़ोल्डर) यह समझ में आता है कि क्या आप कम एक-बंद परियोजनाएं कर रहे हैं, जिसमें पूरी तरह से अलग-अलग कामेच्छा की आवश्यकताएं हैं जो वास्तव में परियोजना के लिए ही अधिक हैं।

कॉनडा जो खाली वातावरण बनाता है वह लगभग 122 एमबी का होता है जबकि वर्चुअन की अवधि लगभग 12 एमबी है, इसलिए यह एक और कारण है कि आप कॉनडा के वातावरण को हर जगह नहीं बिखेरना पसंद कर सकते हैं।

अंत में, एक और सतही संकेत जो कॉनडा अपने केंद्रीकृत एनवी को पसंद करता है, वह है (फिर, डिफ़ॉल्ट रूप से) यदि आप अपने स्वयं के प्रोजेक्ट फ़ोल्डर में एक कॉनडा एनवी बनाते हैं और इसे सक्रिय करते हैं तो आपके शेल में दिखाई देने वाला नाम उपसर्ग (रास्ता बहुत लंबा) निरपेक्ष है फ़ोल्डर का पथ। आप इसे एक नाम देकर ठीक कर सकते हैं, लेकिन virtualenv डिफ़ॉल्ट रूप से सही काम करता है।

मुझे उम्मीद है कि यह जानकारी दो पैकेज प्रबंधकों के प्रभुत्व के लिए तेजी से बासी हो जाएगी, लेकिन ये आज के रूप में व्यापार-बंद हैं :)


अच्छे खर्च! क्या आपको दोनों का उपयोग करने में कुछ कठिनाइयाँ हैं? क्या आपने कभी इस्तेमाल किया है pipenv?
मिखाइल_सम

8

एक और नया विकल्प और एक पर्यावरण प्राप्त करने और चलाने का मेरा वर्तमान पसंदीदा तरीका पिपेनव है

यह वर्तमान में Python.org से आधिकारिक रूप से अनुशंसित पायथन पैकेजिंग टूल है


1
इसने "एह? व्हाट पिपेनव?" को प्रेरित किया, जिसने मुझे reddit.com/r/Python/comments/8jd6aq/… और sedimental.org/the_packaging_gradient.html पर ले लिया । मैं अभी भी नहीं जानता कि क्या उपयोग करना है, लेकिन कम से कम मुझे बेहतर सूचित किया गया है। मुझे लगता है।
मैट विल्की

परिचय देखने और जल्दी से परिचय पढ़ने के बाद, पिपेनव पायथन संस्करणों का प्रबंधन करने में सक्षम नहीं लगता है ...
कार्ल्स

@CarlesAlcolea pipenv द्वारा विभिन्न संस्करणों को निर्दिष्ट किया जा सकता है: pipenv --twoPython2 के लिए और pipenv --three for python3
Kurian

3

हां, condaस्थापित करने के लिए बहुत आसान है virtualenv, और बहुत बाद वाले को बदल देता है।


6
एनाकोंडा एक आभासी वातावरण स्थापित करने के लिए निर्देश क्यों प्रदान करता है अगर यह उन्हें बदल देता है?
जेएमएच

1
@jmh एनाकोंडा आभासी वातावरण को प्रतिस्थापित नहीं करता है, यह पायथन-विशिष्ट वर्चुअल वातावरण प्रबंधन उपकरण virtualenvको एक अधिक सामान्य वर्चुअल सिस्टम प्रबंधन उपकरण के साथ बदल देता है conda। इसके अलावा, एनाकोंडा सिर्फ पायथन + वितरण है जिसमें कॉनडा टूल शामिल है; प्रश्न (और उत्तर) केवल कोनडा के बारे में हैं।
मर्व

3
यह उत्तर वर्षों से पहले आए उत्तरों से परे कुछ भी नहीं जोड़ता है।
मर्व

1

मैं कॉर्पोरेट में काम करता हूं, मशीन के साथ कई फ़ायरवॉल के पीछे, जिस पर मेरे पास कोई व्यवस्थापक शुल्क नहीं है

अजगर (2 वर्ष) के साथ अपने सीमित अनुभव में मैं कुछ पुस्तकालयों (JayDeBeApi, sasl) में आया हूं, जो कि पाइप थ्रू C ++ निर्भरता त्रुटियों के माध्यम से स्थापित करते समय: Microsoft Visual C ++ 14.0 की आवश्यकता होती है। इसे "Microsoft Visual C ++ बिल्ड टूल" के साथ प्राप्त करें: http://landinghub.visualstudio.com/visual-cpp-n-tools

ये कॉन्डा के साथ ठीक स्थापित हैं, इसलिए उन दिनों के बाद से मैंने कोंडा एनवी के साथ काम करना शुरू कर दिया। हालाँकि, यह आसान नहीं है कि मैं c.programfiles के अंदर निर्भरता स्थापित करने से कोंडा को रोकना आसान नहीं हूँ, जहाँ मेरी पहुंच नहीं है।

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