2011-02-12 9 views
13

तो pip और virtualenvsetuptools की तुलना में ध्वनि अद्भुत है। अनइंस्टॉल करने में सक्षम होने के नाते बहुत अच्छा होगा। लेकिन मेरी परियोजना पहले से ही setuptools का उपयोग कर रही है, तो मैं माइग्रेट कैसे करूं? जिन वेबसाइटों को मैं अब तक ढूंढने में सक्षम हूं वे बहुत अस्पष्ट और सामान्य हैं। तो यहाँ मुख्य वेब साइटों बाहर पढ़ रहे हैं और सामान की कोशिश कर के बाद सवालों का एक संकलन है:सेटअप टूल्स से पीपी + वर्चुअलनेव में माइग्रेट करना

  • सबसे पहले, virtualenv और pip अब तक एक प्रयोग करने योग्य स्थिति में होना चाहिए? यदि नहीं, तो कृपया बाकी को एक पागल आदमी के रूप में अवहेलना करें।
  • virtualenv कैसे स्थापित किया जाना चाहिए? मैं विश्वास करने के लिए तैयार नहीं हूं कि इसे explained elsewhere के रूप में समेकित किया गया है।
  • क्या वर्चुअल वातावरण में matplotlib को स्थापित करने के लिए परीक्षण निर्देशों का एक सेट है? किसी कारण से यह हमेशा पैकेज को स्थापित करने के बजाय इसे संकलित करना चाहता है, और यह हमेशा विफलता में समाप्त होता है (build-dep के बाद भी जो 250 एमबी डिस्क स्पेस लेता है)। चेतावनियों के पूरे समूह के बाद यह src/mplutils.cpp:17: error: ‘vsprintf’ was not declared in this scope प्रिंट करता है।
  • या तो उपकरण setup.py के साथ कैसे सहभागिता करता है? pipeasy_install को प्रतिस्थापित करना है, लेकिन यह स्पष्ट नहीं है कि यह एक ड्रॉप-इन या अधिक जटिल रिश्ते है या नहीं।
  • केवल वर्चुअलएन्व विकास मोड के लिए है, या उपयोगकर्ताओं को इसे इंस्टॉल करना चाहिए?
  • परिणामस्वरूप पैकेज न्यूनतम आवश्यकताओं (जैसे वर्तमान अंडा) के साथ स्थापित किया जाएगा, या यह सभी निर्भरताओं के साथ & बाइनरी के साथ स्थापित किया जाएगा और सभी निर्माण उपकरण, वर्चुअल वातावरण में एक गीगाबाइट राक्षस बनाने के साथ?
  • क्या उपयोगकर्ता को वर्चुअल वातावरण में स्थापित होने पर परिणामस्वरूप पैकेज चलाने के लिए $PATH और $PYTHONPATH संशोधित करना होगा?
  • क्या मुझे virtualenv के लिए पुराने पुराने दिनों में बनाने की ज़रूरत है?
  • #egg=Package यूआरएल सिंटैक्स के साथ क्या है? यह मानक यूआरएल का हिस्सा नहीं है, तो यह एक अलग पैरामीटर क्यों नहीं है?
  • यूआरएल में @rev शामिल है? अंत में मुझे लगता है, लेकिन दस्तावेज इस बारे में स्पष्ट नहीं है ("आप यूआरएल में @rev भी शामिल कर सकते हैं")।
  • "as a sort of template for the new file" के रूप में मौजूदा आवश्यकताओं फ़ाइल का उपयोग करके समझा जाना चाहिए? इसका मतलब किसी भी चीज से हो सकता है।
+4

AFAIK, pip और virtualenv setuptools के लिए प्रतिस्थापन नहीं हैं। वितरण सेटअपtools के लिए सुझाए गए प्रतिस्थापन है, पाइप easy_install की जगह लेता है, और वर्चुअलनव अपनी विशेष चीज़ है। पहले दो पैकेज रखरखाव का वर्णन करता है कि पैकेज को कैसे इंस्टॉल किया जाए, अगले दो इंस्टॉलर को इंस्टॉल किए गए (और निर्भरता स्थापित करें) का ट्रैक रखने में मदद करें, और अंतिम उपयोगकर्ता को आसानी से स्थापित संकुल के एकाधिक संग्रहों (जैसे विभिन्न संस्करणों) एक ही पैकेज के)। – AFoglia

उत्तर

21

वाह, यह काफी प्रश्नों का एक सेट है। उनमें से कई वास्तव में अधिक जानकारी के साथ अपने स्वयं के SO सवाल के लायक होंगे। मैं अपनी पूरी कोशिश करूंगा:

First of all, are virtualenv and pip supposed to be in a usable state by now?

हां, हालांकि वे सभी की जरूरतों को पूरा नहीं करते हैं। पिप और virtualenv (अजगर पैकेज प्रबंधन में सब कुछ के साथ) आदर्श से दूर हैं, लेकिन वे व्यापक रूप से इस्तेमाल और फिर भी पर निर्भर कर रहे हैं।

How should virtualenv be installed? I'm not quite ready to believe it's as convoluted as explained elsewhere.

जवाब आप लिंक जटिल है क्योंकि यह आपके वैश्विक अजगर स्थापना करने के लिए कोई भी बदलाव करने से बचते हैं और इसके बजाय ~/.local में सब कुछ स्थापित करने के लिए कोशिश कर रही है। इसमें कुछ फायदे हैं, लेकिन सेटअप के लिए अधिक जटिल है। यह virtualenvwrapper भी स्थापित कर रहा है, जो वर्चुअलएन्व के साथ काम करने के लिए सुविधा बैश स्क्रिप्ट का एक सेट है, लेकिन वर्चुअलएन्व का उपयोग करने के लिए आवश्यक नहीं है।

आप उबंटू, aptitude install python-setuptoolseasy_install virtualenv के बाद (अपने वैश्विक अजगर पर्यावरण को कोई नुकसान कर रही है, जब तक आप भी उबंटू virtualenv पैकेज स्थापित किया था बिना आप एक काम कर virtualenv स्थापना मिलना चाहिए, जो मैं के रूप में यह होगा की सलाह नहीं देते पर हैं शायद एक पुराना संस्करण हो)।

Is there a set of tested instructions for how to install matplotlib in a virtual environment? For some reason it always wants to compile it here instead of just installing a package, and it always ends in failure (even after build-dep which took up 250 MB of disk space). After a whole bunch of warnings it prints src/mplutils.cpp:17: error: ‘vsprintf’ was not declared in this scope.

यह क्योंकि पिप, डिजाइन द्वारा, केवल स्रोत से स्थापित करता है यह पूर्व संकलित युग्मक स्थापित नहीं है "हमेशा संकलित करने के लिए चाहता है",। यह एक विवादास्पद विकल्प है, और शायद यही कारण है कि पाइप ने पाइथन वेब डेवलपर्स के बीच व्यापक रूप से गोद लेने को देखा है, जो अधिक शुद्ध-पायथन पैकेज का उपयोग करते हैं और आमतौर पर पॉज़िक्स वातावरण में विकसित और तैनाती करते हैं जहां एक कामकाजी संकलन श्रृंखला मानक होती है।

डिज़ाइन पसंद का कारण यह है कि प्रीकंपील्ड बाइनरी प्रदान करने के लिए विभिन्न प्लेटफार्मों के साथ एक संयोजन विस्फोट समस्या होती है और आर्किटेक्चर का निर्माण होता है (पायथन संस्करण, यूसीएस -2 बनाम यूसीएस -4 पायथन बिल्ड, 32 बनाम 64-बिट ...) । जिस तरह से काम करता है के easy_install PyPI प्रकार पर सही द्विआधारी पैकेज पाता है, समय के सबसे अधिक है, लेकिन इन सभी कारकों के लिए खाते में नहीं है और तोड़ सकते हैं। तो पीआईपी पूरी तरह से उस मुद्दे से बचाता है (इसे एक आवश्यकता के साथ बदलकर कि आपके पास एक कामकाजी संकलन वातावरण है)।

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

मैं क्या आपके संकलन जिसके कारण त्रुटि पता नहीं है, यह आदेशों की इस श्रृंखला के साथ (उबंटू 10.10 पर) मेरे लिए काम करता है:

virtualenv --no-site-packages tmp 
. tmp/bin/activate 
pip install numpy 
pip install -f http://downloads.sourceforge.net/project/matplotlib/matplotlib/matplotlib-1.0.1/matplotlib-1.0.1.tar.gz matplotlib 

"-f" लिंक आवश्यक है सबसे हाल ही में प्राप्त करने के लिए संस्करण, matplotlib के unusual download URLs on PyPI के कारण।

How does either tool interact with setup.py? pip is supposed to replace easy_install, but it's not clear whether it's a drop-in or more complicated relationship.

setup.py फ़ाइल distutils, पायथन मानक पुस्तकालय का पैकेज प्रबंधन के एक सम्मेलन है "समाधान।" distutils अकेले कुछ प्रमुख विशेषताओं को याद कर रहा है, और setuptools एक व्यापक रूप से उपयोग किया जाने वाला तीसरा पक्ष पैकेज है जो कुछ अतिरिक्त सुविधाओं को प्रदान करने के लिए "गले लगाता है और विस्तार करता है"। setuptools भी setup.py का उपयोग करता है। easy_install इंस्टॉलर के साथ बंडल इंस्टॉलर है। Setuptools विकास कई सालों से रुक गया, और distribute कुछ लंबी बग ठीक करने के लिए setuptools का एक कांटा था। आखिर में फोर्क को सेटअप टोल में वितरित करने के विलय के साथ हल किया गया था, और सेटअपटोल विकास अब सक्रिय है (एक नए रखरखाव के साथ)।

distutils2distutils का एक अधिकतर पुनर्लेखित नया संस्करण था जिसने setuptools/वितरण से सर्वोत्तम विचारों को शामिल करने का प्रयास किया था, और इसे पायथन मानक पुस्तकालय का हिस्सा बनना था। दुर्भाग्यवश यह प्रयास असफल रहा, इसलिए सेटअप के समय के लिए पायथन पैकेजिंग के लिए वास्तविक तथ्य बना हुआ है।

पिप easy_install बदल देता है, लेकिन यह setuptools को प्रतिस्थापित नहीं करता; इसे setuptools की आवश्यकता है और इसके शीर्ष पर बनाता है। इस प्रकार यह setup.py का भी उपयोग करता है।

Is virtualenv only for development mode, or should the users also install it?

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

Will the resulting package be installed with the minimum requirements (like the current egg), or will it be installed with sources & binaries for all dependencies plus all the build tools, creating a gigabyte monster in the virtual environment?

यदि संकुल की आवश्यकता वाले पैकेज को पीपी के माध्यम से स्थापित किया गया है, तो इसे स्रोत से संकलित करने की आवश्यकता होगी। यह किसी भी निर्भरता पर भी लागू होता है जिसके लिए संकलन की आवश्यकता होती है।

यह है कि क्या आप एक virtualenv का उपयोग के सवाल से संबंधित नहीं है। easy_install डिफ़ॉल्ट रूप से वर्चुअलएन्व में उपलब्ध है और वहां ठीक काम करता है। यह प्री-कंपाइल बाइनरी अंडे इंस्टॉल कर सकता है, जैसे कि यह वर्चुअलएन्व के बाहर करता है।

Will the users have to modify their $PATH and $PYTHONPATH to run the resulting package if it's installed in a virtual environment?

आदेश में एक virtualenv में स्थापित कुछ भी उपयोग करने के लिए है, तो आप virtualenv के bin/ निर्देशिका में अजगर बाइनरी (या किसी अन्य लिपि virtualenv इस द्विआधारी संदर्भ में स्थापित) का उपयोग करने की जरूरत है। सबसे आम तरीका यह करने के लिए virtualenv के activate या activate.bat स्क्रिप्ट का उपयोग करने के लिए अस्थायी रूप संशोधित करने के लिए खोल PATH तो virtualenv के bin/ निर्देशिका पहले है। PYTHONPATH संशोधित करना वर्चुअलएन्व के साथ आम तौर पर उपयोगी या आवश्यक नहीं है।

Do I need to create a script from a text string for virtualenv like in the bad old days?

सं

What is with the #egg=Package URL syntax? That's not part of the standard URL, so why isn't it a separate parameter?

"# अंडा = ProjectName-संस्करण" URL खंड हैक पहले introduced by setuptools and easy_install था। चूंकि दिए गए पैकेज नाम और संस्करण के लिए स्थापित करने के लिए उम्मीदवार वितरण खोजने के लिए वेब से easy_install scrapes लिंक, इस हैक ने पैकेजर्स लेखकों को पीईपीआई पर लिंक जोड़ने की अनुमति दी है कि easy_install समझ सकता है, भले ही वे अपनी फ़ाइलों के लिए easy_install के मानक नामकरण सम्मेलनों का उपयोग न करें ।

Where is @rev included in the URL? At the end I suppose, but the documentation is not clear about this ("You can also include @rev in the URL").

एक जोड़े वाक्य कि उद्धृत टुकड़ा के बाद वहाँ के लिए एक लिंक है "अन्य सुविधाओं के बारे में जानने के लिए the requirements file format पढ़ें।" @rev सुविधा पूरी तरह से प्रलेखित और प्रदर्शित की गई है।

What is supposed to be understood by using an existing requirements file as "as a sort of template for the new file"? This could mean any number of things.

अगले ही वाक्य "यह क्रम में devel-req.txt में सूचीबद्ध संकुल रखने के लिए और टिप्पणियों को सुरक्षित रखने जाएगा।" कहते हैं मुझे यकीन नहीं है कि एक बेहतर संक्षिप्त विवरण क्या होगा।

+0

वाह, धन्यवाद! यहां विचार के लिए बहुत सारे भोजन। – l0b0

+0

वास्तव में इस तरह के प्रश्न और वर्णनात्मक समाधान की सराहना करते हैं :) – Drake

4

मैं अपने सभी सवालों का जवाब नहीं कर सकते हैं, लेकिन उम्मीद है कि निम्नलिखित में मदद करता है।

virtualenv और pip दोनों उपयोग करने योग्य हैं। कई पाइथन देव इन रोज इस्तेमाल करते हैं।

आप एक easy_install काम कर रहा है के बाद से, दोनों स्थापित करने के लिए सबसे आसान तरीका है निम्नलिखित:

easy_install pip 
easy_install virtualenv 

एक बार जब आप virtualenv है, बस टाइप virtualenv yourEnvName और आप नाम के एक निर्देशिका में अपने नए अजगर आभासी वातावरण मिलेगा yourEnvName

वहाँ से, यह source yourEnvName/bin/activate जितना आसान है और आभासी अजगर दुभाषिया अपने सक्रिय हो जाएगा।मैं matplotlib के बारे में कुछ भी नहीं जानता, लेकिन इंस्टॉलेशन इंटरैक्शन के बाद ठीक काम करना चाहिए जब तक कि अजीब हार्ड-कोड वाले पथ मुद्दे न हों।

आप easy_install के माध्यम से कुछ स्थापित कर सकते हैं, तो आप आमतौर पर pip के माध्यम से स्थापित कर सकते हैं। मुझे कुछ भी नहीं मिला है easy_install ऐसा कर सकता है pip नहीं कर सका।

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

यदि आप या कोई उपयोगकर्ता वर्चुअलएन्व में कुछ स्थापित करता है, तो यह अन्य वर्चुअलएन्ड्स या सिस्टम पायथन दुभाषिया में उपलब्ध नहीं होगा। आप एक आभासी वातावरण आप पर पुस्तकालय स्थापित करने के लिए स्विच source /path/to/yourvirtualenv/bin/activate आदेश का उपयोग करने की आवश्यकता होगी।

"नई फ़ाइल के लिए एक प्रकार के टेम्पलेट के रूप में" उनका क्या अर्थ है कि pip freeze -r devel-req.txt > stable-req.txt कमांड पर आधारित नई फ़ाइल stable-req.txt बना देगा। केवल एक ही अंतर स्थापित किया जाएगा जो मौजूदा फाइल में पहले से निर्दिष्ट नहीं है, नई फाइल में होगा।

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