पुस्तकालयों को हर कार्यक्रम के साथ बंडल करने के बजाय अलग से क्यों भेजा जाता है?


10

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

उन्हें मनाने के लिए मैं कौन-सी दलीलें दे सकता था?


मेरी विशिष्ट स्थिति यह है: मैं SymPy पर काम कर रहा हूं , जो प्रतीकात्मक गणित के लिए एक ओपन-सोर्स पायथन लाइब्रेरी है। इसका एक मुख्य भाग mpmath है , जो कि बहु-प्रीलिव फ़्लोटिंग पॉइंट अंकगणित के लिए एक पुस्तकालय है। SymPy mpmath के बिना काम नहीं करता है, कोई विकल्प नहीं है। जैसे, यह शुरू से ही SymPy के साथ बंडल किया गया है (मुझे बताया गया था कि एक नया संस्करण आयात होने पर हर बार ठीक करने के लिए आमतौर पर छोटी असंगतताएं थीं)। यह भी ध्यान दिया जाना चाहिए कि mpmath के डेवलपर SymPy के विकास में शामिल होते थे। अब अनब्लॉकिंग mpmath पर एक मुद्दा है, आप इसे यहाँ पढ़ सकते हैं ।

चर्चा को संक्षेप में प्रस्तुत करने के लिए:

अनबंडल:

  • पायथन 3 (मामूली तर्क IMHO) के लिए कुछ हद तक आसान पोर्टिंग

  • वितरण के लिए आसान पैकेजिंग

  • तेज़ (सुरक्षा) उपयोगकर्ताओं के लिए अद्यतन सुविधा

  • "पैकेजिंग और हैंडलिंग निर्भरताएं कठिन समस्याएं हैं, लेकिन वे हल हैं। यह निश्चित रूप से एक ऐसा क्षेत्र नहीं है जहां हमें अपना काम करना चाहिए।"

बंडलिंग रखें:

  • स्थापना। यह लिनक्स पर आसान, मैक पर कठिन और विंडोज पर बहुत कठिन है। सु पहुंच और अन्य समस्याओं का अभाव।

  • यह सिम्पी का एक अभिन्न हिस्सा है, यानी सिम्पी इसके बिना काम नहीं करती (बिल्कुल भी नहीं)

  • वहाँ कोई अन्य पैकेज, कि mpmath का काम कर सकते हैं

  • "जब मैं, एक उपयोगकर्ता के रूप में, सहानुभूति डाउनलोड करता हूं, तो मुझे उम्मीद है कि यह सिर्फ काम करेगा।"


यह मेरी विशिष्ट स्थिति है, लेकिन मैं एक ऐसे उत्तर को स्वीकार करूंगा जो एक अच्छा, सामान्य उत्तर प्रदान करता है।


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

क्या आपका आवेदन खुला स्रोत है?
एंटोन बर्कोवस्की

@ एटन हां, यह सिम्पी है , जो प्रतीकात्मक गणित के लिए एक ओपन-सोर्स पायथन लाइब्रेरी है। मैं इसमें GSoC छात्र (पूर्ण प्रकटीकरण :)) के रूप में काम कर रहा हूं।
19

@Tshepang पर चर्चा देखी जा सकती है: code.google.com/p/sympy/issues/detail?id=2482
VPeric

@VPeric: उस चर्चा को सारांशित करने के लिए अतिरिक्त अच्छा होगा, बस अपने प्रश्न का उत्तर देने के इच्छुक लोगों के लिए समय की बचत करना।
tshepang

जवाबों:


5

फिर भी एक और उत्तर, लेकिन एक मैं सबसे महत्वपूर्ण (सिर्फ मेरी अपनी निजी राय) मानता हूं, हालांकि अन्य सभी अच्छे उत्तर भी हैं।

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


1
यह एक महत्वपूर्ण बिंदु है, और यह इस बात का हिस्सा है कि कई वितरण कार्यक्रमों के साथ पुस्तकालयों को नापसंद करते हैं; उदाहरण के लिए डेबियन की एक लाइब्रेरी को निष्पादन योग्य या सांख्यिकीय रूप से लाइब्रेरी से न जोड़ने की नीति है, जब तक कि इसे केवल उस विशेष कार्यक्रम (या, स्थैतिक लिंकिंग के लिए, उन मामलों में जहां डायनेमिक लिंकिंग समर्थित नहीं है) द्वारा उपयोग किया जा सकता है।
गिल्स एसओ- बुराई को रोकें '

अंत में, यह शायद सबसे महत्वपूर्ण बिंदु है। मैं अन्य उत्तरों से भी सहमत हूं, लेकिन मुझे सिर्फ एक को चुनना था। :)
विप्रिक

6

आपके द्वारा बताए गए फ़ायदों के ऊपर (सुरक्षा, पैकेजिंग, सुविधाएँ), मैं कुछ और सोच सकता हूँ:

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

  • अन्य परियोजनाओं के लिए यह उपयोगी होने की स्थिति में, यह सामान्य रूप से डिस्क उपयोग के आकार को कम करेगा (जैसे कोड की केवल एक प्रति)।

  • यह आपके कोड की गुणवत्ता में सुधार करेगा, जिससे आपको कुछ करने के लिए मजबूर होना पड़ेगा। जैसा कि पहले बिंदु में, यह आपके कोड की गुणवत्ता पर भी निर्भर करता है।

  • लाइब्रेरी के उपयोगकर्ताओं की संख्या में वृद्धि (यदि यह अलग हो गई है) तो इसे और अधिक सामान्य बनाने में मदद मिलेगी, जो संभवतः इसकी गुणवत्ता में भी सुधार करेगी।


1
सभी अच्छे अंक। मुझे लगता है कि इसे "भविष्य-प्रूफिंग" के रूप में पढ़ा जा सकता है: आपके कुछ बिंदु वर्तमान में लागू होते हैं (वर्तमान में mpmath का उपयोग केवल कुछ अन्य परियोजनाओं में किया जाता है), लेकिन यह देखना आसान है कि आपके प्रत्येक अंक प्रत्येक नई परियोजना के लिए लाभ प्राप्त करते हैं mpmath का उपयोग कर।
VPeric

4

हालांकि फायदे स्पष्ट हैं, परिनियोजन में आसानी आपके मामले में प्रोग्राम के साथ शिपिंग लाइब्रेरी के लिए मुख्य तर्क लगती है।

यहां बंडल के खिलाफ कुछ और तर्क दिए गए हैं:

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

  • विंडोज और मैक ओएस में, पायथन पैकेज मैनेजर जैसे कि पाइप आमतौर पर वैसे भी उपयोग किए जाते हैं, क्योंकि हाथ से लाइब्रेरी स्थापित करना बोझिल है।

  • यहां तक ​​कि Google ऐप इंजन में हार्ड-तैनाती के बारे में तर्क दिए गए हैं, लेकिन सभी वेब फ्रेमवर्क इस पर नहीं चलते हैं। कई को भी पोर्टिंग की आवश्यकता होती है, पुस्तकालयों के लिए डिस्क स्थान सीमित है, और यह सब के बाद वेब अनुप्रयोग होस्टिंग है! यह प्रतीकात्मक गणित का उपयोग करने के लिए वेब एप्लिकेशन के लिए संभावना नहीं है।

  • यदि कोई निर्भरता उपलब्ध नहीं है या गलत संस्करण है, तो कोई भी आपको स्वच्छ त्रुटि संदेश प्रदर्शित करने से रोकता है।

  • लोग अक्सर इससे नफरत करते हैं जब प्रोग्राम खुद को उनसे ज्यादा चालाक समझता है। उपयोगकर्ताओं को अपने स्वयं के सिस्टम का ख्याल रखना चाहिए।


क्या आप अंतिम बिंदु की व्याख्या कर सकते हैं। अगर यह बंडलिंग के खिलाफ / एक तर्क है तो मैं नहीं बता सकता।
tshepang 20

3
मैं इसे बंडलिंग के खिलाफ समझता हूं - उपयोगकर्ता यह स्थापित करना चाहते हैं कि वे क्या चाहते हैं, न कि मुझे उन पर एक विशेष संस्करण के लिए मजबूर करना चाहिए।
VPeric

3

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


3

एक आकार के लिए सभी फिट नहीं है।

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

बाइनरी वितरण (यदि आप उन्हें प्रदान करते हैं) या तो रास्ते पर जा सकते हैं; बंडलिंग शायद उन लोगों के लिए समझ में आता है, क्योंकि वे डाउनस्ट्रीम द्वारा उपयोग नहीं किए जाते हैं।

लेकिन कोई कारण नहीं है कि आप विंडोज और मैक इंस्टालर के लिए विपरीत निर्णय और बंडल नहीं बना सकते।


1
जबकि मैं सामान्य रूप से सहमत हूं, यह एक अतिरिक्त बोझ (हालांकि छोटा) बनाता है इसका मतलब है कि शायद कोई भी इस समाधान को वापस नहीं करेगा।
VPeric

2

बंडलिंग बनाम निर्भर पैकेजिंग दुनिया में एक पुरानी बहस है। यह दस्तावेज़ विचार के इन दो स्कूलों के बारे में बताता है: http://www.aosabook.org/en/packaging.html


2
यह एक दिलचस्प रीड था, लेकिन यह कार्यान्वयन विवरण और सामान्य दर्शन की तुलना में विभिन्न पायथन बारीकियों के बारे में अधिक बात करता है।
VPeric
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.