RPM

2013-08-07 8 views
12

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

ट्रिकियर बिट यह है कि प्रत्येक एप्लिकेशन को सभी पायथन मॉड्यूल निर्भरताओं के साथ वितरित किया जाना चाहिए, और इन्हें किसी भी सिस्टम के लिए वरीयता में इस्तेमाल किया जाना चाहिए।

इनमें से कुछ आरपीएम के लिए लक्षित होस्ट सीमित नेटवर्क पहुंच हैं, इसलिए आरपीएम में समय पर तैनात करने के बजाय ऐप चलाने के लिए आवश्यक सब कुछ होना चाहिए।

मैंने पैकेजिंग को देखा है और virtualenv वितरित किया है, लेकिन वर्चुअलएन्व को स्थानांतरित करना अच्छी तरह से समर्थित नहीं प्रतीत होता है।

मैंने zc.buildout पर देखा है, लेकिन दस्तावेज को कम करने के लिए मिला है। मैं देख सकता था कि विकास के दौरान निर्भरताओं को कैसे डाउनलोड किया जाए, लेकिन बड़े आवेदन के हिस्से के रूप में उन्हें वितरित करने के तरीके को नहीं। यह संभव है कि अलग-अलग ऐप्स को एक ही मॉड्यूल के विभिन्न संस्करणों की आवश्यकता हो, इसलिए इन्हें सिस्टम को व्यापक रूप से स्थापित नहीं किया जाना चाहिए।

एक और दर्द बिंदु यह है कि ऐप में किसी भी पायथन स्क्रिप्ट को विकास के दौरान और तैनाती के बाद एक अलग sys.path का उपयोग करने के लिए संशोधित करने की आवश्यकता है, मैं इसके आसपास एक स्पष्ट तरीका नहीं देख सका।

इस पर सुझाव हैं कि इसे कैसे प्राप्त किया जाए? विशिष्ट मॉड्यूल निर्भरता लाने के लिए

  1. डाउनलोड आवेदन स्रोत
  2. रन स्क्रिप्ट यदि मौजूद नहीं है (शायद pip का प्रयोग करके)
  3. रन स्क्रिप्ट का निर्माण करने की: देखने के एक डेवलपर के दृष्टिकोण से कार्यप्रवाह का एक आदर्श सारांश कैसा लगेगा पायथन ऐप, और पैकेज और इसे सभी डाउनलोड निर्भरताओं RPM

अंतिम आरपीएम को तब स्थापित किया जा सकता है जब कोई नेटवर्क एक्सेस न हो और केवल एक पायथन दुभाषिया स्थापित हो।

+1

आप एक स्टैंडअलोन पायथन निष्पादन योग्य वितरित कर सकते हैं - आरपीएम में पैक किया गया? क्या आपको अपने स्रोत कोड को उपयोगकर्ताओं के लिए उपलब्ध होने की आवश्यकता है? यदि यहां नहीं दिखता है http://stackoverflow.com/questions/5458048/how-to-make-a-python-script-standalone-executable-to-run-without-any- निर्भरता – Anshul

+1

मैंने इसका उपयोग नहीं किया है, लेकिन मैंने इसका उपयोग नहीं किया है, लेकिन [कोंडा] [http://www.continuum.io/blog/conda) का उद्देश्य आपके जैसे मामलों को संभालना है। इस लिंक पर "अपने स्वयं के पैकेज रोलिंग" अनुभाग देखें। –

+0

आपको पीपी बंडल या पीआईपी "व्हील हाउस" का उपयोग करना चाहिए – ionelmc

उत्तर

1

मैं इसे दो अलग-अलग समस्याओं के रूप में देखता हूं।

  1. आप अपने डेवलपर्स के लिए दोहराने योग्य इंस्टॉल/बिल्ड सिस्टम चाहते हैं।

  2. आप एक इंस्टॉलर निर्माता चाहते हैं।

बिल्डआउट (या पीपी, शायद एक अतिरिक्त स्क्रिप्ट के साथ संयोजन में) पहली समस्या का ख्याल रख सकता है। असल में: "एक नए लैपटॉप पर विकास के लिए परियोजना कैसे तैयार करें"। आदर्श रूप से आप केवल python bootstrap.py;bin/buildout कहेंगे और तैयार रहें (पीआईपी/वर्चुअलएन्व के साथ)।

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

इंस्टॉलर बिल्डर स्क्रिप्ट वर्चुअलबॉक्स के अंदर अपनी प्रोजेक्ट का एक नया चेकआउट कर सकता है और उस स्थान पर दोहराने योग्य बिल्ड चीज़ कर सकता है जहां आप इसे इंस्टॉलर (/opt/yourproject, उदाहरण के लिए) में रखना चाहते हैं।

फिर वास्तविक पैकेज (.deb, .rpm, जो कुछ भी) बनाने के लिए FPM का उपयोग करें। एफपीएम विकल्पों में पास करें जो आवश्यक निर्भरताओं के बारे में बताते हैं, इस तरह आप हमेशा यह सुनिश्चित कर सकते हैं कि उन निर्भरताओं को स्थापित किया गया है। (नोट: ये ओएस-स्तरीय निर्भरताएं हैं जैसे memcached या postgres; पाइथन निर्भरताओं को पीआईपी या buildout द्वारा संभाला जाना चाहिए)।

यदि आप इन दो छोटी समस्याओं में अपनी बड़ी समस्या को विभाजित करते हैं, तो दोनों पर अलग से हमला किया जा सकता है।

+1

एफपीएम के साथ एक समस्या यह है कि अलग-अलग पैकेज (जिन्हें आप इंस्टॉल करना चाहते हैं) में अलग-अलग निर्भरताएं हो सकती हैं (उदाहरण के लिए एक पैकेज को 1.6 और अन्य अनुरोध 2.1, आदि की आवश्यकता होती है) और आप इन मतभेदों को व्यक्त नहीं कर सकते हैं, क्योंकि एफपीएम आरपीएम के रूप में एक पायथन पैकेज पैकेज करेगा और इसे इंस्टॉल करेगा (वैश्विक स्तर पर, बोलने के लिए)। इसलिए एक पायथन परियोजना और इसकी निर्भरताओं को एक आरपीएम के रूप में स्थापित करना बेहतर होगा, जैसे [rpmvenv] (https://github.com/kevinconway/rpmvenv)। – miku

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