python setuptools बनाम distutils: distutils अभी भी एक चीज क्यों है?




packaging (4)

यह तथ्य है कि setuptools मानक पुस्तकालय में एकमात्र कारण नहीं है

यही एक कारण है। निम्नलिखित NumPy setup.py से सीधे है:

if len(sys.argv) >= 2 and ('--help' in sys.argv[1:] or
        sys.argv[1] in ('--help-commands', 'egg_info', '--version',
                        'clean')):
    # Use setuptools for these commands (they don't work well or at all
    # with distutils).  For normal builds use distutils.
    try:
        from setuptools import setup
    except ImportError:
        from distutils.core import setup

तो NumPy setuptools पसंद setuptools अगर यह इसे मिल सकता है। लेकिन तब SciPy ऐसा करने के लिए प्रयोग किया जाता था, जब तक कि कुछ स्थितियों में distutils पसंद करने के लिए patched किया गया था। प्रतिबद्ध लॉग का हवाला देते हुए:

Setuptools sets mode +x on the test scripts, so that Nose refuses to run
them. Better not do that.

बेशक, setuptools और distribute बीच एक विलय उचित समय में यह सब हल करना चाहिए, लेकिन कई संकुल अभी भी Python 2.6 प्रतिष्ठानों का समर्थन करने की आवश्यकता है।

https://code.i-harness.com

पायथन के पास टूल्स का एक भ्रमित इतिहास है जिसका उपयोग परियोजनाओं को पैकेज और वर्णन करने के लिए किया जा सकता है: इनमें मानक लाइब्रेरी, distribute , setuptools , और setuptools (और शायद अधिक) में setuptools । ऐसा प्रतीत होता है कि distribute और setuptools पक्ष में बंद कर दिया गया था, जो दो प्रतिस्पर्धी मानकों को छोड़ देता है।

मेरी समझ के लिए setuptools की setuptools में कहीं अधिक विकल्प प्रदान करता है (उदाहरण के लिए निर्भरता, परीक्षण इत्यादि), हालांकि यह पायथन मानक पुस्तकालय (अभी तक?) में शामिल नहीं है।

पायथन पैकेजिंग उपयोगकर्ता मार्गदर्शिका [ 1 ] अब सिफारिश करती है:

परियोजनाओं को परिभाषित करने और स्रोत वितरण बनाने के लिए setuptools का उपयोग करें।

और बताता है:

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

यहां तक ​​कि उन परियोजनाओं के लिए जो distutils का उपयोग करना चुनते हैं, जब पीपी ऐसी परियोजनाओं को सीधे स्रोत से स्थापित करता है ( setuptools व्हील फ़ाइल से स्थापित करने के बजाए), यह वास्तव में इसके बजाय setuptools का उपयोग करके आपकी परियोजना का निर्माण करेगा।

हालांकि, विभिन्न प्रोजेक्ट की setup.py फाइलों को देखते हुए पता चलता है कि यह वास्तविक मानक प्रतीत नहीं होता है। कई पैकेज अभी भी setuptools उपयोग करते हैं और जो setuptools समर्थन setuptools अक्सर setuptools साथ setuptools मिश्रण मिश्रण जैसे फॉलबैक आयात करके:

try:
    from setuptools import setup
except ImportError:
    from distutils.core import setup

एक सेटअप लिखने का एक तरीका खोजने के प्रयास द्वारा पीछा किया गया जो सेटअप setuptools और setuptools दोनों द्वारा स्थापित किया जा सकता है। इसमें अक्सर त्रुटि-प्रवण निर्भरता जांच के विभिन्न तरीकों को शामिल किया जाता है, क्योंकि distutils सेटअप फ़ंक्शन में निर्भरताओं का समर्थन नहीं करता है।

लोग अभी भी setuptools का समर्थन करने के लिए अतिरिक्त प्रयास क्यों कर रहे हैं - यह तथ्य है कि setuptools मानक पुस्तकालय में एकमात्र कारण नहीं है? setuptools के फायदे क्या हैं और setup.py फ़ाइलों को लिखने में कोई कमी है जो केवल setuptools समर्थन setuptools


कई कारण हैं जिनके बारे में हम अभी भी बात करते हैं और आसवन का उपयोग करते हैं, भले ही सेटअपटॉल्स बिना किसी संदेह के बेहतर टूल सेट हैं।

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

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

नई परियोजनाओं के लिए मेरा व्यक्तिगत दृष्टिकोण इस धारणा से शुरू होता है कि मैं distutils का उपयोग करने जा रहा हूँ। जैसे ही प्रोजेक्ट सेटअप की सुविधाओं की आवश्यकता के लिए बढ़ता है, मैं अपग्रेड करता हूं। Setuptools distutils के लिए एक ड्रॉप-इन-प्रतिस्थापन है, यह मेरे setup.py में एक-पंक्ति परिवर्तन है।


कृपया एक नज़र इसे देखिये। यह सभी पैकेजिंग विधियों को बहुत अच्छी तरह से बताता है, और कुछ हद तक आपके प्रश्न का उत्तर देने में मदद कर सकता है: webpage

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

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

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


असल में, यह जिम्मेदारियों के विभाजन के कारण है।

setuptools पायथन मानक पुस्तकालय का हिस्सा नहीं है क्योंकि यह पायथन कोर टीम की बजाय किसी तीसरे पक्ष द्वारा बनाए रखा जाता है। जिसका अर्थ है, अन्य चीजों के साथ:

  • यह कोर टेस्ट सूट द्वारा कवर नहीं है और कोर कार्यक्षमता पर निर्भर नहीं है
  • यह स्वयं एड-ऑन मॉड्यूल के लिए कोर मानकों को सेट नहीं करता है (उनका स्थान, आयात का साधन, सी एक्सटेंशन 'बाइनरी इंटरफ़ेस इत्यादि)।
  • यह पाइथन रिलीज से स्वतंत्र रूप से अद्यतन और जारी किया गया है

प्रभावी रूप से, कोर टीम ने तीसरे पक्षों को उस (सभी विस्तारित कंपाइलर / पैकेज प्रारूप / जो भी समर्थन) से परे सभी सामान छोड़ते समय "मूल मानकों" और "न्यूनतम आवश्यक संकलन" भागों को सुरक्षित रखने के लिए आसवन के दायरे को कम कर दिया है। कोड जो पहले उन "विस्तारित हिस्सों" को कवर कर रहा था , पीछे की संगतता के लिए बाएं छोड़ दिया गया था

वितरित पायथन मॉड्यूल से - पायथन 2.7.12 प्रलेखन :

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

उपरोक्त कारणों से अन्य ओएस के लिए पैकेज भी setuptools और pip अलग-अलग प्रदान करने की संभावना है

  • और क्योंकि वे जरूरी नहीं हैं - या रखरखाव के लिए भी हानिकारक हैं - जब सिस्टम पर पहले से ही एक और पैकेज प्रबंधक है।




distutils