python वितरण, distutils, setuptools और distutils2 के बीच मतभेद?




packaging distribute (7)

2014 के आखिर में इस सवाल को अद्यतन करते हुए सौभाग्य से पाइथन पैकेजिंग अराजकता को कंटिन्यूम के " conda " पैकेज मैनेजर द्वारा साफ कर दिया गया है।

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

conda create -n py34 python=3.4 anaconda

conda create -n py26 python=2.6 anaconda

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

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

source activate <env name>

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

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

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

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

https://code.i-harness.com

स्थिति

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

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


समस्या

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


प्रश्न

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


इस मुद्दे पर स्पष्ट समुदाय मार्गदर्शन की कमी के बारे में कई लोगों ने यहां शिकायत की।

वर्तमान में यह टूल अनुशंसाओं पर सबसे अच्छा आधिकारिक स्रोत जैसा दिखता है: https://packaging.python.org/en/latest/current.html#tool-recommendations


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

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

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

जनवरी 2017 में पाइथन पैकेजिंग परिदृश्य का सारांश यहां दिया गया है:

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

  • पाइथन में पैकेजिंग के लिए Distutils अभी भी मानक उपकरण है। यह मानक पुस्तकालय (पायथन 2 और पायथन 3.0 से 3.6) में शामिल है। यह सरल पायथन वितरण के लिए उपयोगी है, लेकिन सुविधाओं की कमी है। यह distutils Python पैकेज पेश करता है जिसे आपके setup.py स्क्रिप्ट में आयात किया जा सकता है।

  • Setuptools को Distutils की सीमाओं को दूर करने के लिए विकसित किया गया था, और मानक पुस्तकालय में शामिल नहीं है। इसने easy_install नामक एक कमांड लाइन उपयोगिता पेश की। यह setuptools पायथन पैकेज भी पेश किया गया है setuptools आपके setup.py स्क्रिप्ट में आयात किया जा सकता है, और pkg_resources पायथन पैकेज जिसे वितरण के साथ स्थापित डेटा फ़ाइलों का पता लगाने के लिए आपके कोड में आयात किया जा सकता है। इसके गॉथस में से एक यह है कि यह बंदर- distutils पाइथन पैकेज को दूर करता है। यह pip साथ अच्छी तरह से काम करना चाहिए। यह नियमित रिलीज देखता है।

  • scikit-build एक बेहतर बिल्ड सिस्टम जनरेटर है जो आंतरिक रूप से संकलित पायथन एक्सटेंशन बनाने के लिए सीएमके का उपयोग करता है। चूंकि विज्ञान-निर्माण distutils पर आधारित नहीं है, यह वास्तव में इसकी कोई सीमा नहीं है। जब निंजा-निर्माण मौजूद होता है, तो विज्ञान-निर्माण विकल्पों की तुलना में तीन गुना तेजी से बड़ी परियोजनाओं को संकलित कर सकता है। यह pip साथ अच्छी तरह से काम करना चाहिए। यह नियमित रिलीज देखता है।

बहिष्कृत / छोड़े गए टूल्स:

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

  • Distutils2 सबसे अच्छा Distutils, Setuptools और वितरण लेने का प्रयास था और पायथन की मानक पुस्तकालय में शामिल मानक उपकरण बन गया। विचार यह था कि Distutils2 पुराने पायथन संस्करणों के लिए वितरित किया जाएगा, और कि Distutils2 का नाम बदलकर पायथन 3.3 के लिए packaging दिया जाएगा, जिसमें इसे अपनी मानक लाइब्रेरी में शामिल किया जाएगा। हालांकि, ये योजनाएं इरादे से नहीं थीं, और वर्तमान में, Distutils2 एक त्याग परियोजना है । नवीनतम रिलीज मार्च 2012 में था, और इसके पापी होम पेज को अंततः इसकी मृत्यु को दर्शाने के लिए अद्यतन किया गया है।

अल्फा सॉफ्टवेयर:

  • Distlib एक ऐसा टूल है जिसका उद्देश्य पिछले टूल्स की कार्यक्षमता के सबसेट को कार्यान्वित करना है, लेकिन केवल कार्यक्षमता जो स्वीकार किए गए पीईपी में बहुत अच्छी तरह से परिभाषित है। यह पीईपीए (पायथन पैकेज अथॉरिटी) के औजारों में से एक है, और उम्मीद है कि इसे अंततः पाइथन मानक पुस्तकालय में शामिल किया जाना चाहिए। इसे अभी भी अल्फा सॉफ़्टवेयर माना जाता है, इसलिए अंतिम उपयोगकर्ता सावधान रहें।

  • कुछ और टूल्स हैं (उदाहरण: बेंटो), लेकिन मैं उनका उल्लेख नहीं करूंगा क्योंकि वे इस उत्तर पोस्ट के लिए बहुत अस्पष्ट या विशिष्ट या शुरुआती या अविकसित हैं, अन्यथा वे सीधे विकल्प नहीं हैं।

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

तो निष्कर्ष में, इन सभी विकल्पों में से, मैं Setuptools की अनुशंसा करता हूं , जब तक कि आपकी आवश्यकताएं बहुत बुनियादी न हों और आपको केवल Distutils की आवश्यकता हो। Setuptools वर्चुअलनव और पिप, उपकरण जो मैं अत्यधिक अनुशंसा करता हूं के साथ बहुत अच्छी तरह से काम करता है। वर्चुअलनव और पिप दोनों को आधिकारिक माना जा सकता है, क्योंकि वे पीईपीए का हिस्सा हैं, और पायथन 3 अब जहाजों को ensurepip (जो आपको कुछ सिस्टम पर pip स्थापित करने में मदद करता है)।

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

साइड-नोट के रूप में, मैं वर्चुअलनव 1.10 या उच्चतर का उपयोग करने की अनुशंसा करता हूं, क्योंकि यह पहली रिलीज है जो पाइथन 2 और 3 दोनों के लिए Setuptools / वितरित विलय को पहचानती है।


नोट: उत्तर बहिष्कृत, अब अप्रचलित वितरित करें।

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


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

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

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

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

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


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

  • Distutils पैकेजिंग के लिए इस्तेमाल किया जाने वाला मानक उपकरण है। यह सरल आवश्यकताओं के लिए बल्कि अच्छी तरह से काम करता है, लेकिन सीमित है और विस्तार करने के लिए तुच्छ नहीं है।

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

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

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

और जानकारी:

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


यह विषय अभी भी प्रवाह में प्रतीत होता है। 10-31-2013 तक "पायथन पैकेजिंग उपयोगकर्ता मार्गदर्शिका" त्वरित सिफारिशें परिभाषित करती हैं "वर्तमान में कौन सा टूलसेट अनुशंसित है"। यह " पायथन पैकेजिंग का भविष्य " से भी जुड़ा हुआ है





distribute