2011-01-15 12 views
7

यदि मेरे पास पाइथन पैकेज है जो कुछ सी पुस्तकालयों पर निर्भर करता है (जैसे संख्यात्मक गणना के लिए जीएनयू वैज्ञानिक लाइब्रेरी (जीएसएल) कहें), क्या यह मेरे कोड के साथ लाइब्रेरी को बंडल करना एक अच्छा विचार है?क्या मुझे अपने पायथन एप्लिकेशन के साथ सी पुस्तकालयों को बंडल करना चाहिए?

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

हालांकि, क्या यह संभव है कि उपयोगकर्ता के पास पहले से ही लाइब्रेरी स्थापित है या फिर कोई अन्य कारण है कि मुझे ऐसा क्यों नहीं करना चाहिए?

मुझे पता है कि मैं केवल बाइनरी वितरण प्रदान करके उपयोगकर्ताओं के लिए इसे आसान बना सकता हूं, लेकिन मैं सभी संभावित ओएस के लिए बाइनरी वितरण को बनाए रखने से बचना चाहता हूं। तो, मैं एक स्रोत वितरण के साथ रहना चाहता हूं, लेकिन उपयोगकर्ता के लिए (जो गर्व से सी संकलक का मालिक है) स्थापना python setup.py install जितनी आसान होनी चाहिए।

उत्तर

0

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

मुझे लगता है कि कोई अनूठा समाधान नहीं है, लेकिन यह विचार मैं अब तक सोच सकता हूं।

गुड लक

0

आप virtualenv का उपयोग आपके आवेदन के लिए एक निजी अजगर वातावरण बनाने के कर सकते हैं। यह अन्य पुस्तकालयों के साथ संघर्ष से बचाता है। यदि आप Distribute का उपयोग कर अपने पुस्तकालयों जैसे मॉड्यूल और निर्भरताओं को पैकेज करते हैं तो यह सबसे अच्छा है। Distutils कुछ और है जो शोध के लायक है।

4

वितरण किसी भी सॉफ्टवेयर प्रोजेक्ट के लिए कठिन भागों में से एक है। एक मानक रनटाइम को परिभाषित करके जावा और .NET इस बोझ का हिस्सा उठाएं और फिर बस "बस सबकुछ वितरित करें" कहें। बेशक एक कमी है: रनटाइम द्वारा समर्थित भाषा में सबकुछ फिर से लिखा जाना चाहिए - जैसे ही आप मूल कोड का उपयोग करना चाहते हैं, आप सभी फायदे खो देते हैं।

यह पाइथन में कठिन है, क्योंकि यह रूबी, सी, सी ++ और अन्य भाषाओं में है, क्योंकि वे आमतौर पर मौजूदा मूल पुस्तकालयों का लाभ उठाते हैं।

सामान्यतया:

  1. यह संभव एक स्रोत sdist प्राप्त करने के लिए है, एक उदाहरण के रूप pypi.python.org के माध्यम से। अपने install_requires को सही ढंग से सेट करें (शायद आपको जीएसएल के लिए पायथन बाइंडिंग की आवश्यकता होगी, जीएसएल स्वयं नहीं)। मानक सेटअपtools/वितरण लेआउट का प्रयोग करें। यह किसी को भी आपके कंप्यूटर को लेने और पैकेज करने के लिए किसी भी डिस्ट्रो के लिए पैकेज रखरखाव कहने देगा।

  2. इसके अतिरिक्त, अपने दर्शकों के लिए एक पूर्ण उड़ा इंस्टॉल करने योग्य पैकेज प्रदान करने पर विचार करें। आपको सभी distros और ऑपरेटिंग सिस्टम का समर्थन करने की ज़रूरत नहीं है; एक या दो चुनें जिसे आप सबसे अधिक इस्तेमाल करेंगे। PyInstaller जैसे टूल्स आपको कई ऑपरेटिंग सिस्टम के लिए एक इंस्टॉल करने योग्य, रननेबल पैकेज बनाने देंगे, लेकिन विशेष रूप से लिनक्स के लिए आप चाहते हैं कि उपयोगकर्ता ट्रांसमिशन डिप्टी (libgsl?) के वितरण के अपने संस्करण को स्थापित करे - आपको एक पूर्ण उड़ा दी गई डेब या आरपीएम पैकेज को संतुष्ट करने के लिए - फिर से, किसी भी और सभी distro का समर्थन करने की कोशिश मत करो, आप पागल हो जाएगा। आप जो कुछ अधिक उपयोग करते हैं उसका समर्थन करें, और अन्य उपयोगकर्ताओं को अन्य पैकेजिंग आवश्यकताओं के साथ आपकी सहायता करने दें।

इसके अलावा Python Packaging Guide

पर एक नज़र
संबंधित मुद्दे

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