2012-02-17 10 views
7

हमारा एक अजगर की दुकान है। हमारे पास इनहाउस विकसित विभिन्न पायथन पैकेज हैं और ग्राहकों के वातावरण (मशीनों) पर तैनात किए जाएंगे।एकाधिक ऑपरेटिंग सिस्टम पर पाइथन वितरण (अंडे) (और इसके लिए) बनाने के लिए सर्वोत्तम प्रथाएं क्या हैं

इस प्रकार हमारा विकास और रिलीज चक्र होता है।

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

मानते हैं कि "परीक्षण" कई ऑपरेटिंग सिस्टम (प्लेटफार्मों में एपीआई की संगतता की जांच करने के लिए) पर होता है, वितरण तैयार करने और केंद्रीय संग्रह स्थान पर धकेलने का सबसे अच्छा अभ्यास क्या है।

क्या संग्रह सर्वर पर ऑपरेटिंग सिस्टम विशिष्ट अंडे (जैसे, samplepkg-1.0.0.win32.egg और samplepkg-1.0.0.linux.egg पर सबसे अच्छा है? सुनिश्चित नहीं है कि वे इस तरह से कैसे तैयार किए जा सकते हैं setuptools का उपयोग कर।) या एक एकल अंडा है क्योंकि एपीआई प्लेटफॉर्म पर समान रहता है? समुदाय द्वारा पीछा किया जाने वाला कोई अन्य अभ्यास?

उत्तर

5

आप एक ही पैकेज का उपयोग कर सकते हैं:

  1. पैकेज कार्यों का उपयोग नहीं करता है कि आपके सभी लक्ष्य प्लेटफार्मों पर उपलब्ध नहीं हैं/वर्गों (जैसे अध्यायों को देखने के संस्करण के लिए अजगर मानक पुस्तकालय संदर्भ के 36-39 2.7.2 उन चीज़ों के लिए जिन्हें आप उस मामले में उपयोग नहीं करना चाहिए)
  2. आप सी/सी ++ में लिखे गए एक्सटेंशन का उपयोग नहीं कर रहे हैं जिन्हें प्रत्येक प्लेटफॉर्म के लिए संकलित करने की आवश्यकता है।

यह आमतौर पर ओएस विशिष्ट कार्यों से दूर रहने का एक अच्छा विचार है जो आपके सभी लक्षित प्लेटफ़ॉर्म पर उपलब्ध नहीं हैं। मानक पुस्तकालय उस सम्मान में काफी अच्छी तरह से प्रलेखित है।

2

मुझे लगता है कि इस मामले में, रोलैंड का उल्लेख ऊपर बताए गए कारणों से एक पैकेज का उपयोग करना अधिक जटिल होगा। आपके विकास के माहौल में आप अलग-अलग प्लेटफार्मों के लिए अलग-अलग फ़ोल्डर्स रख सकते हैं, प्रत्येक प्लेटफ़ॉर्म विशिष्ट कोड (जैसे सी/सी ++ में लिखे गए एक्सटेंशन/लाइब्रेरीज़) के साथ। अलग-अलग अंडों का उत्पादन करने के लिए आपको इन फ़ोल्डर्स के भीतर अपने सेटअपटॉल्स की नकल करने की आवश्यकता होगी, लेकिन आखिरकार यह एक जटिल पैकेज (मुझे लगता है कि, आप वास्तव में किस कोड के साथ काम कर रहे हैं) के बारे में अधिक जानने के बिना एक पैकेज में सब कुछ डालने की कोशिश कर रहे हैं।

किसी भी मामले में, मानक लाइब्रेरी पर दस्तावेज़ों को पढ़ने के साथ-साथ distutils (http://docs.python.org/distutils/) आपको अपना समाधान ढूंढने में मदद करनी चाहिए।

1

प्लेटफ़ॉर्म-विशिष्ट अंडे केवल सी कोड वाले संकुल वितरित करने के लिए हैं; अन्यथा अंडे की फाइलें प्लेटफॉर्म-स्वतंत्र होती हैं और आपको केवल एक, मंच-स्वतंत्र अंडा वितरित करने की आवश्यकता होती है।

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

टीएल; डॉ संस्करण: जिस तरह से सेटअपtools अंडे बनाता है वह जिस तरीके से वितरित किया जाना चाहिए; यदि आप एक मंच-निर्भर एक या इसके विपरीत में क्रॉस-प्लेटफॉर्म अंडे बनाने का प्रयास करते हैं, तो आपको कुछ दर्द का अनुभव होने की संभावना है।;-)

0

यदि आपके पास केवल पाइथन मॉड्यूल हैं, तो पाइथन में छिपा हुआ सभी अंतर रखें, या तो एक ही फाइलें (पायथन स्टडी लिब) या अलग-अलग फाइलें (पाइसरियल)।

यदि आपने मॉड्यूल संकलित किया है, तो यह थोड़ा सा ट्रिकियर है।

./lib/display.py # frontend, platform-independent 
./lib.linux-x86_64-2.6/_display.so 
./lib.linux-armv5tejl-2.6/_display.so 

और कार्यक्रम की शुरुआत की शुरुआत में इस कोड:

sys.path.append("lib.%s-%s-%s.%s" % ((posix.uname()[0].lower(), 
             posix.uname()[4]) 
            +sys.version_info[:2])) 

आप संरचना की तरह लपेट कर सकते हैं

मुझे लगता है कि विस्तार संकलित की जरूरत है एक परियोजना के लिए निम्नलिखित निर्देशिका संरचना का उपयोग यह एक .egg में भी है, जब तक आप निर्दिष्ट करते हैं कि यह ज़िप-सुरक्षित नहीं है।

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

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