मैं अजगर कार्यक्रमों को कैसे वितरित कर सकता हूं?


102

मेरा आवेदन इस तरह दिखता है:

main.py
खिड़कियाँ/
    __init__.py
    mainwindow.py
    ...
नमूना/
    __init__.py
    orders.py
    ...
संसाधन /
    image1.png
    logo.jpg
    ...

कार्यक्रम मुख्य धारा के साथ शुरू किया गया है। क्या इसमें से एक 'अंतिम' एप्लिकेशन बनाने का एक अच्छा तरीका है? मैं py2exe / py2app जैसी किसी चीज़ के बारे में सोच रहा हूं, लेकिन अजगर इंटरप्रेटर / मॉड्यूल को कॉपी किए बिना उस एप्लिकेशन में जहां एक ही एक निष्पादन योग्य है।

मुझे डिस्टुटिल्स पर एक नज़र थी, लेकिन ऐसा लगता है कि यह पायथन डायरेक्टरी में एक प्रोग्राम स्थापित करता है, जो नॉन-लाइनक्स प्लेटफार्मों पर सामान्य नहीं है।

फिलहाल मैं सिर्फ लक्ष्य मशीन पर पूरे स्रोत फ़ोल्डर की प्रतिलिपि बनाता हूं और main.pywखिड़कियों पर एक उपनाम बनाता हूं । कुछ असुविधाएँ:

  • आइकन डिफ़ॉल्ट अजगर आइकन है।
  • मुझे मैन्युअल रूप से उपनाम बनाना होगा।
  • मेरे स्रोत निर्देशिका में स्रोत नियंत्रण फ़ोल्डर की तरह बहुत सारी अतिरिक्त फ़ाइलें हैं।
  • मुझे मैन्युअल रूप से नाम बदलना main.pyहोगा main.pyw।
  • यह अच्छा होगा यदि लक्ष्य मशीन पर केवल `.pyo * फाइलें हों। इसका कोई वास्तविक कारण नहीं है, मुझे सिर्फ अनावश्यक फाइलें होना पसंद नहीं है।

एक अच्छा स्वचालित वितरण कैसे बनता है?

  • विंडोज के लिए? (यह एकमात्र मंच है जिसे मुझे फिलहाल समर्थन करना है।)
  • मैक के लिए?
  • linux के लिए?

2
"मुझे डिस्टुटिल्स पर एक नज़र थी, लेकिन ऐसा लगता है कि यह पायथन डायरेक्टरी में एक प्रोग्राम स्थापित करता है, जो नॉन-लाइनक्स प्लेटफॉर्म पर सामान्य नहीं है।" आप ऐसा क्यों कह रहे हैं? आपने क्या पाठ पढ़ा जो कहा गया? यह निश्चित रूप से असत्य है, आपको यह धारणा कहां से मिली?
— एस.लॉट


जवाबों:


37

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

मैं शायद यह सलाह दूंगा कि आप इसे लिनक्स, और Py2exe या विंडोज के लिए कुछ समान के साथ वितरित करें। OS XI के लिए पता नहीं है। यदि यह एक अंतिम उपयोगकर्ता अनुप्रयोग है, तो आप शायद डिस्क छवि प्रकार की चीज चाहते हैं, मुझे नहीं पता कि यह कैसे करना है। लेकिन उपयोगकर्ता के अनुभव के बारे में अधिक जानकारी के लिए इस पोस्ट को पढ़ें । प्रोग्रामर के लिए किए गए एक आवेदन के लिए आप शायद ओएस एक्स पर एक डिस्टुटिल्स टाइप इंस्टॉल के साथ ठीक हैं।


1
Mac और linux इस समय महत्वपूर्ण नहीं हैं। Py2app बनाता है .app बंडलों। और मुझे लगता है कि .dmg में मैक एप्स को शिपिंग करना पुराना है, किसी को .zip का उपयोग करना चाहिए। क्या केवल एक निर्देशिका बनाने distऔर उसमें सभी प्रासंगिक फ़ाइलों को कॉपी करने के लिए डिस्टुटिल्स का उपयोग करना संभव है?
— जॉर्ज शॉर्ली

1
@gs: sdist कमांड सभी स्रोत फ़ाइलों की एक टार फाइल बनाएगी।
— मार्टिन वी। लोविस

5
@gs: .dmg में शिपिंग मैक ऐप्स वास्तव में बेहद सामान्य है। .dmg की डिस्क छवियां हैं, और अनुप्रयोगों के लिए प्रारूप नहीं है (जो कि .app होगा)। इस प्रकार, आप अक्सर कुछ .ADAD फ़ाइल के साथ .dmg के अंदर एक एकल .app पाते हैं।
— एरिक ओ लेबिगॉट

2
@ मुझे नहीं पता कि आप डिस्टुटिल्स को केवल डिरेक्टरी डिस्टर्ब करने के लिए क्यों चाहते हैं और वहां मौजूद फाइलों को कॉपी कर सकते हैं, आप खुद ऐसा कर सकते हैं। डिस्टिल्स बहुत सारी चीजें करता है, जिसमें विंडोज़ इंस्टालर बनाना भी शामिल है, और पायथन 2.6 से स्टार्ट-मेन्यू में लिंक भी बनाए जाते हैं। हालांकि, आपको अलग से अजगर स्थापित करने की आवश्यकता होगी, इसलिए एंड-यूज़र ऐप के लिए, मुझे लगता है कि py2exe एक बेहतर समाधान है, क्योंकि इसमें स्वयं अजगर शामिल है। ओएस एक्स के लिए शिपिंग / इंस्टॉलर पर उनके ब्लॉगगॉस्ट में अलेक्जेंडर लिमी द्वारा विस्तार से चर्चा की गई है, इसलिए मैं उन्हें टाल देता हूं।
— लेनार्ट रेगेब्र


61

मैं अत्यधिक रूप से सभी प्रमुख प्लेटफार्मों का समर्थन करने वाले Pyinstaller की सलाह देता हूं । Py2exe और py2app की तरह, यह विंडोज़ पर एक मानक निष्पादन योग्य और OS X पर एक ऐप बंडल का उत्पादन करता है, लेकिन इसका लाभ ऑटो-रिज़ॉल्यूशन की सामान्य निर्भरता का एक शानदार काम करने और अतिरिक्त कॉन्फ़िगरेशन ट्विक्स के बिना उन्हें शामिल करने से भी होता है।

यह भी ध्यान दें कि यदि आप विंडोज के लिए पायथन 2.6 को तैनात कर रहे हैं, तो आपको आवेदन करना चाहिए इस पैच को Pyinstaller ट्रंक पर ।

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


3
मुझे यकीन नहीं है कि यह ओवरकिल है। Pyinstaller के साथ ऐप को बंडल करना वास्तव में अन्य तरीकों की तुलना में आसान हो सकता है, विशेष रूप से सी एक्सटेंशन पर निर्भरता वाले लोगों के लिए ... ज्यादातर मामलों में एक लाइन कमांड-लाइन कॉल के रूप में सरल। पाइथन + निर्भरता + ऐप को स्वयं स्थापित करना (चाहे डिस्टिल्स के माध्यम से, आदि, या बस एक ज़िप फ़ाइल) अधिक शामिल है, खासकर यदि डेवलपर मैन्युअल रूप से लक्ष्य मशीन को स्वयं कॉन्फ़िगर करने में सक्षम नहीं है और क्लाइंट को निर्देश प्रदान करने की आवश्यकता है। कम से कम विंडोज पर, मुझे लगता है कि वितरण की शैली समझ में आती है।
— डैनियल नाब

1
Pyinstaller के साथ थोड़ा असुविधाजनक, जब आप pyinstaller के साथ बनाए गए निष्पादन योग्य का उपयोग करते हैं, तो निष्पादन की शुरुआत में कुछ सेकंड लगते हैं।
— जुआनपब्लो

1
ठीक वही जो मेरे द्वारा खोजा जा रहा था। मुझे कभी-कभी अपनी स्क्रिप्ट को कंप्यूटर पर चलाने की आवश्यकता होती है जहां मैं कुछ भी स्थापित नहीं कर सकता। कोई बाहरी निर्भरता वाला एक एकल निष्पादन योग्य है जो मुझे चाहिए। मैं स्टार्टअप के लिए कुछ सेकंड का समय बचा सकता हूं। धन्यवाद!
— कोडमोंकी

छोटे अनुप्रयोगों के लिए अनुशंसित नहीं है, क्योंकि एक साधारण Hello worldकार्यक्रम 500 एमबी की जगह और 3-5 सेकंड का आरंभिक समय लेगा।
— रफ

आप अपने अनुप्रयोग को वितरित करने के लिए एक अलग वातावरण का उपयोग करके अंतरिक्ष की इस राशि से बच सकते हैं (उदाहरण के लिए, वेनव या पाइनेव का उपयोग करके)
— अलेक्जेंडर सैंटोस

4

फ्रेड्रिक लुंड की squeeze.py एक ऐसी फ़ाइल बना सकते हैं जिसमें पायथन दुभाषिया नहीं है, लेकिन इसके बजाय बाइटकोड है। सही तर्कों के साथ, आप परिणाम फ़ाइल में अन्य फ़ाइलें, मॉड्यूल आदि शामिल कर सकते हैं। मैंने एक परियोजना में इसका सफलतापूर्वक उपयोग किया। परिणामी कार्यक्रम ओएस एक्स, लिनक्स और विंडोज पर बिना किसी समस्या के चला!

पुनश्च : प्रत्येक मशीन को एक पायथन इंटरप्रेटर की आवश्यकता होती है जो कि निचोड़ने के लिए उत्पन्न बायटेकोड के अनुकूल हो। यदि आवश्यक हो, तो आप पायथन के विभिन्न संस्करणों के लिए अलग-अलग बायोटेक संस्करण उत्पन्न कर सकते हैं (केवल पायथन के सही संस्करण के साथ निचोड़ को चलाएं)।


4

मुझे लगता है कि यह भी PEX का उल्लेख करने लायक है (इस सवाल पर अधिक ध्यान दिया गया है और कम ही सवाल है)। अपने स्वयं के विवरण के अनुसार :

PEX फाइलें स्व-निहित निष्पादन योग्य पायथन वर्चुअल वातावरण हैं। अधिक विशेष रूप से, वे एक #!/usr/bin/env pythonऔर विशेष के साथ सावधानीपूर्वक ज़िप फ़ाइलों का निर्माण करते हैं __main__.pyजो आपको PEX रनटाइम के साथ बातचीत करने की अनुमति देता है। ज़िप अनुप्रयोगों के बारे में अधिक जानकारी के लिए, PEP 441 देखें ।

जब मैंने अजगर के लिए पैकेजिंग का अवलोकन पढ़ा तो मैं उस पर टूट पड़ा । उन्होंने यह अच्छी तस्वीर वहां पोस्ट की: यहां छवि विवरण दर्ज करें

संक्षेप में: यदि आप लक्ष्य मशीन पर स्थापित किए जा रहे अजगर पर भरोसा कर सकते हैं, तो PEX का उपयोग एक स्व-युक्त »निष्पादन योग्य« का उत्पादन करने के लिए करें, जिसमें संभवतया PyInstaller द्वारा उत्पादित एक निष्पादन योग्य की तुलना में छोटे फ़ाइल का आकार होगा।


2

मुझसे गलती हो सकती है, लेकिन क्या आयरनपीथॉन में विंडोज़ के लिए कंपाइलर नहीं है?

http://www.ironpython.net

[संपादित करें]

Cx_Freeze को आज़माएं, अब तक का सबसे अच्छा .py से लेकर .exe (साथ ही कुछ .dll) कंपाइलर तक मैंने कभी इस्तेमाल किया है।

http://cx-freeze.sourceforge.net/


1

यदि आप खिड़कियों पर वितरित कर रहे हैं, तो सभी संबंधित फाइलों / इंटरपीटर को स्थापित करने के लिए एक इंस्टॉलर का उपयोग करें जो भी आवश्यक हो। एक setup.exe वितरित करें। यह विंडोज़ पर सबसे अच्छा तरीका है। अन्यथा उपयोगकर्ता शिकायत करेंगे।


1
मुझे इंस्टॉलर की आवश्यकता नहीं है क्योंकि केवल एक उपयोगकर्ता है जो प्रोग्राम का उपयोग करने जा रहा है। लेकिन निश्चित रूप से जब अधिक उपयोगकर्ताओं के लिए एक प्रोग्राम लिख रहा है जो खिड़कियों पर होना चाहिए।
— जॉर्ज शॉली

1
@gs: ओह, केवल एक उपयोगकर्ता। ठीक है, तो मैं एक बुनियादी डिस्टुटिल पैकेज बनाने की सलाह दूंगा, या तो एक स्रोत वितरण या एक विंडोज़ बाइनरी इंस्टॉलर। यह निश्चित रूप से पायथन मॉड्यूल को वितरित करने का एक आसान और अच्छा तरीका है।
— लेन्नर्ट रेग्रोब

0

अजगर डेस्कटॉप अनुप्रयोगों को वितरित करने का सबसे सुविधाजनक * क्रॉस-प्लेटफ़ॉर्म तरीका क्रॉस-प्लेटफॉर्म कोंडा पैकेज मैनेजर पर भरोसा करना है। कई उपकरण हैं जो इसका उपयोग करते हैं:

  • Miniconda-स्थापित करें / बैश स्क्रिप्ट जो ऑटो-डाउनलोड मिनिकोंडा को डाउनलोड करती हैं और ऐप के लिए अलग-अलग कोंडा वातावरण बनाती हैं। पाइप का समर्थन करता है, लेकिन लगता है unmaintain और https डाउनलोड मुद्दों है।
  • कॉन्टिनम द्वारा एनाकोंडा प्रोजेक्ट और (कोंडा) कंस्ट्रक्टर । दोनों ही कोंडा का इस्तेमाल करते हैं। (conda) कंस्ट्रक्टर विंडोज पर स्व-निहित इंस्टॉलर और यहां तक ​​कि एनएसआईएस इंस्टॉलर बनाने में सक्षम प्रतीत होता है, लेकिन पाइप का समर्थन नहीं करता है। एनाकोंडा / मिनिकोंडा इंस्टॉलर की तरह व्यवहार करने लगता है।
  • PyAppShare - अंतिम उपयोगकर्ता पहले Miniconda / Anaconda (एक रनटाइम वातावरण की तरह) स्थापित करता है। फिर सिंगल इन्स्टॉल बैच / बैश स्क्रिप्ट याम्ल स्पेक से पृथक कोंडा वातावरण बनाती है। आवेदन भी एक conda / pip पैकेज है जो पर्यावरण के लिए स्थापित है और एक निष्पादन योग्य प्रविष्टि बिंदु बनाया गया है। क्रॉस-प्लेटफॉर्म डेस्कटॉप और प्रोग्राम शॉर्टकट स्वचालित रूप से बनाए गए। वे पर्यावरण को सक्रिय करते हैं और आवेदन शुरू करते हैं। पाइप का समर्थन करता है।

* डेवलपर के लिए सबसे सुविधाजनक। एंड-यूज़र के लिए पर्याप्त सुविधाजनक है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.