कैसे एक डेबियन पैकेज PyPI से पायथन मॉड्यूल स्थापित कर सकता है


20

यह प्रश्न इस एक को पूरक करने का प्रयास करता है । मेरे पास एक अजगर ऐप है जो PyPI से तीसरे पक्ष के मॉड्यूल का उपयोग करता है। मैं अपने ऐप को एक डेबियन पैकेज में पैकेज करना चाहता हूं, लेकिन पता नहीं है कि अजगर निर्भरता को कैसे संभालते हैं जो डेबियन / ubuntu रिपॉजिटरी (डेबियन पैकेज के रूप में भी पैक) में नहीं हैं

समाधान # 1:
PyPI से मॉड्यूल का निर्माण मेरे डेबियन पैकेज में करें।

समाधान # 2:
सभी PyPI मॉड्यूल के लिए डेबियन पैकेज बनाएं जिनकी मुझे stdeb का उपयोग करने की आवश्यकता है और उन्हें डेबियन / ubuntu खजाने में जोड़ें।

मुझे वास्तव में एक समाधान # 3 की आवश्यकता है क्योंकि मैं अपने डेबियन पैकेज को स्थापित करने के लिए PyPI निर्भरता स्थापित करना चाहता हूं, अधिमानतः एक virtualenv में!

समाधान # 3 क्या होगा ? क्या मुझे DEBIAN / प्रीस्टेन मेंटेनर स्क्रिप्ट को ट्वीक करने की आवश्यकता है ?


क्या आप बता सकते हैं कि आपको डेबियन पैकेज बनाने की आवश्यकता क्यों है? क्या आपके पायथन ऐप को गैर-पायथन संसाधनों की आवश्यकता है?
जोनाथन

@ जोनाथन मैं चाहता हूं कि उपयोगकर्ता उबंटू सॉफ्टवेयर सेंटर से मेरे ऐप को स्थापित करने में सक्षम हों। मुझे लगता है कि मुझे इसके लिए एक * .deb की आवश्यकता है। मेरे पायथन ऐप को गैर-पायथन संसाधनों की आवश्यकता नहीं है, बस तीसरे पक्ष के अजगर मॉड्यूल।
andri_ch

@ जोनाथन डेबियन पैकेज उबंटू में मानक स्थापना विधि है। एक .debफाइल को आसानी से वितरित कर सकते हैं , या एक निजी भंडार, या लॉन्चपैड में एक पीपीए सेटअप कर सकते हैं ।
MestreLion

जवाबों:


20

मैंने डेबियन आईआरसी चैनल irc: //irc.debian.org#debian-mentors पर कुछ अनुरक्षकों के साथ बात की है, ठीक उसी बात के लिए पूछ रहा है, और आम सहमति थी:

समाधान # 1:

एक कोडबस के रूप में अपनी स्रोत फ़ाइलों की प्रतिलिपि बनाकर अपने पैकेज में निर्भरता को एकीकृत करना बहुत पर आधारित है। यह एक पैकेजिंग प्रणाली के उद्देश्य को पराजित करेगा जो निर्भरता, अद्यतन, संस्करण आदि को संभालता है।

समाधान # 3:

बाइनरी स्थापित करते समय गैर-डेबियन पैकेजों को फ्लाई पर डाउनलोड करना ( .deb) एक गंभीर सुरक्षा जोखिम है, निश्चित रूप से नहीं-नहीं। आप भी अर्क को हटाकर निर्भरता का निरीक्षण नहीं कर पाएंगे deb, क्योंकि उन्हें डाउनलोड और इंस्टॉल समय पर स्थापित किया गया है। यह एक दृष्टिकोण है जो पूरी तरह से रिपॉजिटरी सिस्टम को बायपास करता है। कोई भी संबंधित उपयोगकर्ता एक पैकेज से खुश नहीं होगा, जो पर्दे के पीछे (और जैसा कि root, याद रखें!), अविश्वसनीय स्रोतों से अतिरिक्त अविश्वसनीय सॉफ़्टवेयर डाउनलोड करता है। हां, जिसे आपके मामले में DEBIAN/postinst(या preinst) जारी करने और wget(या, आपके मामले में ) जारी करने की आवश्यकता होगीpip install), और वह फ्लैश, ओरेकल जावा, स्टीम और अन्य द्वारा लिया गया दृष्टिकोण है। लेकिन वह मालिकाना, बंद स्रोत सॉफ्टवेयर है, इसलिए उनकी सुरक्षा वैसे भी नहीं है।

समाधान # 1.5:

आपने इसका उल्लेख नहीं किया है, लेकिन आप "बाइनरी" पैकेज ( ) बनाते समय PyPi से डाउनलोड करके, केवल स्रोत समय (यानी, स्रोत पैकेज .orig.tar.gz, में .debian.tar.gz, .dscत्रय) पर निर्भरता को एकीकृत कर सकते हैं .deb। के लिए निर्देश pip installमें जाना जाएगा debian/rules( debianबाइनरी पैकेज के विपरीत, लोअरकेस को नोटिस करें ), और जब आप जारी करते हैं debuildया निष्पादित किया जाएगा dpkg-buildpackage

यह # 1 और # 3 के बीच का मध्य-मैदान है। यह # 3 के कुछ मुद्दों को कम करता है (लेकिन हल नहीं करता है): कम से कम आप अंतिम उत्पाद का निरीक्षण कर सकते हैं, और .debइंस्टॉल समय पर इंटरनेट एक्सेस की आवश्यकता नहीं होगी। सभी जोखिम और बोझ को अंतिम उपयोगकर्ता से पैकेज अनुरक्षक में स्थानांतरित किया जाता है। लेकिन, # 1 जैसी ही समस्याएं हैं, क्योंकि यह अधिकांश पैकेजिंग सिस्टम इन्फ्रास्ट्रक्चर को बायपास करता है। Afterall, हैंडलिंग निर्भरताएँ (संस्करण, अद्यतन, आवश्यकताएँ, संघर्ष) क्यों dpkg/ aptपहली जगह में बनाया गया था! :)

समाधान # 2:

एक सच्चे सही रास्ता ™ । आप अपनी निर्भरता के लिए डेबियन पैकेज बनाते हैं, उन्हें अपने पैकेज में आवश्यकताओं के रूप में सूचीबद्ध करते हैं, .debsया सभी या स्रोत पैकेजों को शिप करते हैं।

वहां से, आपके पास कई विकल्प हैं:

  • डेबियन को शामिल करने के लिए, अपने सॉफ्टवेयर और उसकी निर्भरता दोनों को स्रोत पैकेज सबमिट करें। यदि स्वीकार किया जाता है, तो वे स्वचालित रूप से सभी डेबियन उपयोगकर्ताओं के लिए उपलब्ध होंगे, जिसमें उबंटू जैसे सभी डेरिवेटिव शामिल हैं।

  • लॉन्चपैड में स्रोत पैकेज अपलोड करें , इस प्रकार एक पीपीए बनाते हुए कि कोई भी उबंटू उपयोगकर्ता (और लिनक्स मिंट की तरह इसका डेरिवेटिव) आसानी से जोड़ या स्थापित कर सकता है

  • अपनी वेबसाइट में अपने डेबियन रिपॉजिटरी को होस्ट करें, कि किसी भी डेबियन-आधारित सिस्टम के उपयोगकर्ता उनके साथ जोड़ सकते हैं /etc/apt/sources.list.dऔर aptडाउनलोड करने, स्थापित करने और अद्यतन रखने के लिए बुनियादी ढांचे का उपयोग कर सकते हैं, (ऊपर की तरह!)

  • .debप्रत्यक्ष डाउनलोड और स्थापित करने के लिए फ़ाइलों को होस्ट करें । कोई aptया स्वचालित अपडेट शामिल नहीं है ।

कैसे अपने PyPi निर्भरता (और अपने अजगर सॉफ्टवेयर भी!) पैकेज के लिए के रूप में , वहाँ कई उपकरण और संदर्भ हैं जो प्रक्रिया को आसान बनाते हैं:

और कई उपयोगी संदर्भ:

मदद की ज़रूरत है? उन लोगों की जाँच करें:



2

नहीं है pypi2debpypi से एक पैकेज मिलता है और यह एक देब पैकेज में बनाने के लिए।


0

वे नहीं हैं, पर्ल में cpan की तरह है, यदि आपके पास रिपॉजिटरी है, तो आप apt-get के साथ इंस्टॉल कर सकते हैं, यदि आप पाइप से इंस्टॉल नहीं कर सकते हैं, तो अंतर यह होना चाहिए कि पाइप इन / usr / लोकल में इंस्टॉल हो।

पाइप के साथ स्थापित करने के लिए आप ऐसा कर सकते हैं:

apt-get install python-pip 
pip install foopackage 

उदाहरण के लिए:

pip install MultipartPostHandler2

यह ओपी के सवाल का जवाब नहीं देता है। सवाल यह है कि कैसे एक डेबियन पैकेज को PyPi से Python पैकेज स्थापित करना है ताकि 'apt-get <custom-package>' या 'dpkg -i <custom-package>' PyPi पर निर्भरता को खींच सके।
सेवकप्राइम

वे नहीं हैं, पर्ल में cpan की तरह है, यदि आपके पास रिपॉजिटरी है, तो आप apt-get के साथ इंस्टॉल कर सकते हैं, यदि आप पाइप से इंस्टॉल नहीं कर सकते हैं, तो अंतर यह होना चाहिए कि पाइप / usr / लोकल में पाइप इंस्टॉल हो, लेकिन हो सकता है बेहतर होगा मेरा उत्तर हटाओ।
सेरियो

आपकी टिप्पणी ओपी के प्रश्न का उचित उत्तर प्रदान करती है। आपको अपने मत के जवाब में उस टिप्पणी को अप-वोट किया जाना चाहिए। (उदाहरण के लिए, MestreLion का उत्तर देखें।) जैसा कि, आपका उत्तर ओपी के प्रश्न का उत्तर नहीं देता है।
सेवकप्रेम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.