डिस्ट्रीब्यूटर्स, डिस्टुटिल्स, सेटप्टूल और डिस्टुटिल्स 2 के बीच अंतर?


594

स्थिति

मैं पायथन 3 के लिए एक ओपन-सोर्स लाइब्रेरी को पोर्ट करने की कोशिश कर रहा हूं। 3. ( सिम्पी , अगर कोई सोच रहा है।)

इसलिए, मुझे 2to3पायथन 3. के लिए निर्माण करते समय स्वचालित रूप से चलाने की आवश्यकता है । ऐसा करने के लिए, मुझे उपयोग करने की आवश्यकता है distribute। इसलिए, मुझे वर्तमान प्रणाली को पोर्ट करने की आवश्यकता है, जो (सिद्धांत के अनुसार) है distutils


समस्या

दुर्भाग्य से, मुझे यकीन है कि क्या इन modules- के बीच का अंतर है नहीं कर रहा हूँ distutils, distribute, setuptools। दस्तावेज़ीकरण सबसे अच्छा के रूप में स्केच है, क्योंकि वे सभी एक दूसरे के लिए एक कांटा लगते हैं, जिसका उद्देश्य अधिकांश परिस्थितियों में अनुकूल होना है (लेकिन वास्तव में, सभी नहीं) ... और इसी तरह, और आगे।


प्रश्न

क्या कोई अंतर समझा सकता है? मुझे क्या उपयोग करना चाहिए? सबसे आधुनिक समाधान क्या है? (एक तरफ के रूप में, मैं भी पोर्टिंग पर कुछ गाइड की सराहना करूंगा Distribute, लेकिन यह सवाल के दायरे से परे है ...)


22
कितना भ्रामक? मैं एक जावा / सी ++ बैकग्राउंड से अजगर के पास आता हूं। उन स्थितियों में, वितरण बहुत सीधे आगे है। अजगर के साथ, मैं इन सभी वितरण प्रणालियों के बारे में पूरी तरह से भ्रमित हूं।
रफ़ी खाचदौरीयन

75
मैं सहमत हूं, पायथन पैकेजिंग / इंस्टॉलेशन में समुदाय से कोई स्पष्ट मार्गदर्शन नहीं होने के साथ बहुत अधिक विकल्प हैं।
सबुनकु

6
मैं सिर्फ बाइनरी वितरण का समर्थन नहीं करने वाले पाइप पर इस संबंधित जानकारी को लिंक करना चाहता था lucumr.pocoo.org/2012/6/22/hate-hate-hate-everywhere
pixelbeat

@pixelbeat पाइप पहियों (तथाकथित बाइनरी वितरण) को स्थापित करने का समर्थन करता है, यह लिंक पुराना है।
फ्लिम

जवाबों:


836

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

अजगर पैकेजिंग उपयोगकर्ता गाइड पढ़ने लायक है। प्रत्येक पृष्ठ में एक "अंतिम अद्यतन" तिथि प्रदर्शित होती है, इसलिए आप मैनुअल की पुनरावृत्ति की जांच कर सकते हैं, और यह काफी व्यापक है। तथ्य यह है कि यह पायथन सॉफ्टवेयर फाउंडेशन के python.org के एक उपडोमेन पर होस्ट किया गया है, बस इसमें विश्वास जोड़ता है। परियोजना सारांश पृष्ठ यहाँ विशेष रूप से प्रासंगिक है।

उपकरणों का सारांश:

यहाँ पायथन पैकेजिंग परिदृश्य का सारांश दिया गया है:

समर्थित उपकरण:

पदावनत / छोड़े गए उपकरण:

  • distributeका कांटा था setuptools। यह समान नाम स्थान साझा करता है, इसलिए यदि आपके पास वितरित वितरित है, import setuptoolsतो वास्तव में वितरित के साथ वितरित पैकेज आयात करेगा। डिस्ट्रीब्यूट को वापस सेटप्टूलस 0.7 में मर्ज कर दिया गया था , इसलिए आपको डिस्ट्रिब्यूट का उपयोग करने की आवश्यकता नहीं है। वास्तव में, Pypi पर संस्करण बस एक संगतता परत है जो Setuptools स्थापित करता है।

  • distutils2सबसे अच्छा लेने का प्रयास था distutils, setuptoolsऔर distributeपायथन के मानक पुस्तकालय में शामिल मानक उपकरण बन गया। यह विचार था कि distutils2पुराने पायथन संस्करणों के लिए वितरित किया जाएगा, और distutils2इसका नाम बदलकर packagingअजगर 3.3 के लिए रखा जाएगा , जो इसे अपने मानक पुस्तकालय में शामिल करेगा। ये योजनाएँ वैसे नहीं चलीं, जैसा कि, और वर्तमान में, distutils2एक परित्यक्त परियोजना है । नवीनतम रिलीज़ मार्च 2012 में हुई थी, और इसके Pypi होम पेज को अंततः अपनी मृत्यु को दर्शाने के लिए अपडेट किया गया है।

अन्य:

अन्य उपकरण हैं, यदि आप रुचि रखते हैं, तो पायथन पैकेजिंग उपयोगकर्ता गाइड में प्रोजेक्ट सारांश पढ़ें । मैं उन सभी की सूची नहीं होगा, तो उस पृष्ठ को दोहराना नहीं करने के लिए, और जवाब सवाल है, जो था ही के बारे में मिलान रखने के लिए distribute, distutils, setuptoolsऔर distutils2

सिफ़ारिश करना:

यदि यह सब आपके लिए नया है, और आप नहीं जानते कि कहां से शुरू करें, तो मैं सीखने की सलाह दूंगाsetuptools , साथ में pipऔर virtualenv, जो सभी मिलकर बहुत अच्छा काम करते हैं।

आप में देख रहे हैं virtualenv, तो आप इस सवाल में रुचि हो सकती: बीच क्या अंतर है venv, pyvenv, pyenv, virtualenv, virtualenvwrapper, आदि? । (हां, मुझे पता है, मैं तुम्हारे साथ कराहता हूं।)



6
और कोई बेहतर नहीं लग रहा है: 'Distribute' is a now deprecated fork of the 'Setuptools' project.@ PyPI डिस्ट्रीब्यूट पेज।
कुर्दीमेटल

3
@KurzedMetal, SetupTools लोगों के अनुसार, setuptools 0.7 वितरित और पुराने setuptools दोनों ब्रह्मांड के लिए आदेश को बहाल करने के लिए माना जाएगा। तो चीजें वास्तव में काफी सुधार करने के लिए तैयार हैं!
जॉन मैकडोनल

8
अजगर पैकेजिंग उपयोगकर्ता गाइड अजगर पैकेजिंग की स्थिति पर सबसे अप करने की तारीख की जानकारी होगा। यह 2013 के पेकॉन में निक कफ़लान द्वारा नोट किया गया था ।
इमानुएलोस्टिगन

1
@Flimm अंतिम संपादन काफी समय पहले का है। क्या बेंटो अब तक परिपक्व है?
मार्टिन थोमा

251

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

  • डिस्टुटिल्स मानक उपकरण है जिसका उपयोग पैकेजिंग के लिए किया जाता है। यह साधारण जरूरतों के लिए अच्छी तरह से काम करता है, लेकिन सीमित है और विस्तार करने के लिए तुच्छ नहीं है।

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

  • डिस्ट्रिब्यूट सेटओपूल का एक कांटा है जो डेवलपर्स द्वारा यह महसूस करते हुए शुरू किया गया था कि इसकी विकास गति बहुत धीमी थी और इसे विकसित करना संभव नहीं था। जब एक ही समूह द्वारा डिस्टुटिल्स 2 शुरू किया गया था तो इसका विकास काफी धीमा था। 2013-अगस्त अपडेट: डिस्ट्रीब्यूट को वापस सेटप्टूल में विलय कर दिया गया और बंद कर दिया गया।

  • डिस्टुटिल्स 2 एक नई डिस्टुटिल्स लाइब्रेरी है, जिसे डिस्टिलिल कोडबेस के कांटे के रूप में शुरू किया गया है, जिसमें सेटअप टूल (जिनमें से कुछ पीईपी में अच्छी तरह से चर्चा की गई थी) से अच्छे विचारों और पाइप से प्रेरित एक बुनियादी इंस्टॉलर है। Distutils2 को आयात करने के लिए आप जिस वास्तविक नाम का उपयोग करते हैं packaging, वह पायथन 3.3+ मानक पुस्तकालय में या distutils22.4+ और 3.1–3.2 में है। (जल्द ही एक बैकपोर्ट उपलब्ध होगा।) डिस्टिल्स 2 ने पायथन 3.3 रिलीज नहीं किया, और इसे रोक दिया गया।

और जानकारी:

मुझे उम्मीद है कि मैं जल्द ही अपना गाइड खत्म कर दूंगा, इसमें प्रत्येक लाइब्रेरी के मजबूत और कमजोर बिंदुओं और एक संक्रमण गाइड के बारे में अधिक जानकारी होगी।


1
डिस्टुटिल्स 2, मानक (पीईपी) या नहीं (उदाहरण के लिए, मैं एक जीएसओसी छात्र का उल्लेख करता हूं जो एक विकसित कमांड और स्वचालित स्क्रिप्टिंग पीढ़ी को जोड़ रहा है) के बाद सेटपूलों / वितरित से कुछ अच्छे विचार लेता है, लेकिन यह कभी भी ड्रॉप-इन नहीं होगा प्रतिस्थापन: कुछ भाग हैं जो हम नहीं चाहते (अंडे, वीसीएस एकीकरण, आदि)। OTOH, distutils2 में कुछ चीजें हैं जो सेटप्टूल / वितरित नहीं हैं। संक्रमण को कम करने के लिए, मुझे लगता है कि वितरित डेवलपर्स शायद नए मानकों और उपकरणों का समर्थन करने के लिए distutils2 का उपयोग करेंगे; मुझे यह भी लगता है कि मुझे सेटपूलर्स डेवलपर यह याद है कि वह नए मानकों का समर्थन करना चाहता है।
14ric आराजू जू

1
इस सब में ez_setup कहाँ गिरता है? वहाँ भी distutils2 की स्थिति के लिए कोई अद्यतन कर रहे हैं?
जेम्स मैकमोहन 15

2
@ ThericAraujo देरी के बारे में सुनने के लिए क्षमा करें। मुझे वास्तव में उम्मीद है कि यह 3.4 के लिए समय में तैयार है! मैं अजगर से प्यार करता हूं , लेकिन पैकेजिंग ने मुझे हमेशा दीवार के खिलाफ अपना सिर पीटा है। (अन्य समाचारों में, आपका गाइड कैसे आ रहा है? यदि यह समाप्त हो गया है, तो क्या आप इसे अपने उत्तर में लिंक कर सकते हैं?)
ज़रीन

9
@AlexisHuet इस तरह की टिप्पणी बेहतर होगी यदि इसमें नीचे टिप्पणी का लिंक होगा (जिसे आप shareबटन से प्राप्त कर सकते हैं )।
erikbwork

2
आपको शायद उस उत्तर का उल्लेख करने के लिए अद्यतन करना चाहिए distributeजिसे हाल ही में वापस मर्ज किया गया था setuptools। तथ्य यह है कि बहुत सारी जानकारी आउट-डेटेड है, भ्रम में जोड़ता है
अमरो

5

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


हाँ, तुम समझ गए। : -मुझे लगता है कि इस समय पसंदीदा पैकेज डिस्ट्रिब्यूट है , जो सेटपूल का एक कांटा है, जो डिस्टुटिल्स (मूल पैकेजिंग सिस्टम) का विस्तार है। Setuptools बनाए नहीं रखा जा रहा था इसलिए फोर्क और नाम बदल दिया गया था, हालांकि जब इसे स्थापित किया गया तो यह setuptools के पैकेज नाम का उपयोग करता है! मुझे लगता है कि अधिकांश पायथन डिवेलपर्स अब डिस्ट्रिब्यूट का उपयोग करते हैं, और मैं यह सुनिश्चित करने के लिए कह सकता हूं कि मैं करता हूं।


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

2
@VPeric, वास्तव में, प्रलेखन इस तथ्य को दर्शाता है कि अजगर का यह पहलू प्रवाह की स्थिति में है / गड़बड़ है।
जुआनकोपनज़ा

2

मुझे एहसास है कि मैंने आपकी मूल समस्या में निर्विवाद मान्यताओं को संबोधित किए बिना आपके माध्यमिक प्रश्न का उत्तर दिया है:

मैं एक ओपन-सोर्स लाइब्रेरी को पोर्ट करने की कोशिश कर रहा हूं (SymPy, अगर किसी को आश्चर्य हो रहा है) 3. Python 3 के लिए। ऐसा करने के लिए, मुझे Python 3 के लिए बिल्डिंग बनाते समय 2to3 स्वचालित रूप से चलाने की आवश्यकता है।

आप कर सकते हैं , नहीं की जरूरत है । अन्य रणनीतियों का वर्णन http://docs.python.org/dev/howto/pyporting पर किया गया है

ऐसा करने के लिए, मुझे वितरण का उपयोग करने की आवश्यकता है,

आप कर सकते हैं distutils :) कोड के लिए (नहीं docstrings) का समर्थन करता है का निर्माण समय 2to3 रूपांतरण, एक अलग तरीके है कि के वितरित में: http://docs.python.org/dev/howto/pyporting#during-installation


धन्यवाद, हालांकि हमने रूपांतरण को संभालने के लिए हमारी स्क्रिप्ट लिखकर समस्या को हल करने का निर्णय लिया है। और हाँ, मुझे पता था कि 2to3 का उपयोग करने के अलावा अन्य विकल्प थे, लेकिन SymPy एक जटिल कोडबेस है (पिछली बार जब मैंने जाँच की थी तो लगभग 200k + लाइनें थी) और 2to3 का उपयोग करना एकमात्र यथार्थवादी रणनीति थी। फिर से धन्यवाद, किसी भी मामले में!
वीपरिक जूल

2

2014 के उत्तरार्ध में इस प्रश्न को अद्यतन करना जहां सौभाग्य से पाइथन पैकेजिंग अराजकता को कॉन्टिनम के " कोंडा " पैकेज प्रबंधक द्वारा बहुत साफ किया गया है ।

विशेष रूप से, conda जल्दी से conda " वातावरण " के निर्माण में सक्षम बनाता है । आप पायथन के विभिन्न संस्करणों के साथ अपने वातावरण को कॉन्फ़िगर कर सकते हैं। उदाहरण के लिए:

conda create -n py34 python=3.4 anaconda

conda create -n py26 python=2.6 anaconda

पायथन के विभिन्न संस्करणों के साथ दो ("py34" या "py26") पायथन वातावरण बनाएंगे।

बाद में आप पायथन के विशिष्ट संस्करण के साथ पर्यावरण का आह्वान कर सकते हैं:

source activate <env name>

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

इसके अलावा, कोंडा में निम्नलिखित विशेषताएं हैं:

  • अजगर अज्ञेय
  • क्रॉस प्लेटफॉर्म
  • कोई व्यवस्थापक विशेषाधिकार की आवश्यकता नहीं है
  • स्मार्ट निर्भरता प्रबंधन (एसएटी सॉल्वर के माध्यम से)
  • सी, फोरट्रान और सिस्टम स्तर के पुस्तकालयों के साथ अच्छी तरह से संबंधित है, जिनके खिलाफ आपको लिंक करना पड़ सकता है

यह अंतिम बिंदु विशेष रूप से महत्वपूर्ण है यदि आप वैज्ञानिक कंप्यूटिंग क्षेत्र में हैं।

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