2011-08-03 9 views
15

पायथन में लिखे गए प्रोग्राम में परिवर्तनों को धक्का देने का सबसे अच्छा तरीका क्या है? मेरे पास पाइथन में लिखा गया सॉफ़्टवेयर का एक टुकड़ा है जिसे नियमित रूप से अपडेट किया जाएगा। क्या सबसे अच्छा तरीका होगा यह करने का? सभी मशीनों में विंडोज 7 होगा।पाइथन अनुप्रयोगों को दूरस्थ रूप से अपडेट करने के लिए कैसे करें

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

+2

क्या आप वर्तमान में स्थापना/वितरण के लिए अपने आवेदन को पैकेजिंग कर रहे हैं? क्या यह सिर्फ एक स्क्रिप्ट फ़ाइल है? क्या एप्लिकेशन कोड को अद्यतन करने की आवश्यकता है या आप वेब से डेटा अपडेट लाने के बारे में बात कर रहे हैं? –

उत्तर

7

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

यदि आप किसी स्रोत नियंत्रण प्रोग्राम का उपयोग करते हैं, तो अन्य लोगों को कमांड चलाकर मैन्युअल रूप से संपादन खींचना होगा, लेकिन आप एक स्क्रिप्ट पीआर बैच फ़ाइल बना सकते हैं जो ऐसा करता है और इसे स्टार्ट अप या नियमित अंतराल पर चलाता है ।

बस यह स्पष्ट करने के लिए, यदि आप ऐसा करना चाहते हैं, तो आपको कोड को सर्वर पर और एसएसएच समर्थन और गिट सेट अप करना होगा। यदि आप सेट अप सर्वर के माध्यम से नहीं जाना चाहते हैं, तो मैं github reccomend होगा।

git- http://git-scm.com/ (विंडोज़ संस्करण के लिए, डाउनलोड करने के लिए जाने के लिए और msysGit चुनें)

GitHub - https://github.com/

+0

नील यहां स्पॉट-ऑन है। Mercurial और git दोनों अच्छे विकल्प होंगे, और आप आसानी से एक छोटी 'ऑटो-अपडेट' स्क्रिप्ट लिख सकते हैं जिसे प्रत्येक एक्स दिन कहा जाता है और केवल रेपो का नवीनतम संस्करण खींचता है। – Jonathanb

9

आप पहले से ही InnoSetup के साथ अपने कार्यक्रम पैकेजिंग नहीं कर रहे हैं, मैं दृढ़ता से आप इसे करने के लिए स्विच की सलाह देते हैं, क्योंकि इसमें इस तरह की चीज को आसान बनाने की सुविधा है। आप किसी विशेष परिस्थितियों को निर्दिष्ट कर सकते हैं, जैसे फ़ाइलों को अद्यतन नहीं किया जाना चाहिए यदि वे पहले से मौजूद हैं (यानी यदि आपके पास कोई आंतरिक कॉन्फ़िगरेशन फ़ाइलें या ऐसी चीजें हैं), इनोसेटअप स्क्रिप्ट में।

अगला, क्लाइंट मशीन को आपके ऐप के नए संस्करणों के बारे में जानने की अनुमति देने के लिए, अपने सार्वजनिक वेब सर्वर पर एक बहुत ही छोटी फ़ाइल रखें जिसमें वर्तमान रिलीज का संस्करण संख्या और नवीनतम संस्करण के इंस्टॉलर exe के URL हैं। इस फ़ाइल के लिए उपयोगी होने के लिए, जब भी आप अपने प्रोग्राम का एक नया संस्करण जारी करते हैं तो आपको इस फ़ाइल को अपडेट करना होगा, साथ ही इनोसेटअप स्क्रिप्ट में संस्करण संख्या और आपके प्रोग्राम में कुछ प्रकार के APP_VERSION निरंतर भी अपडेट करना होगा। पता लगा रहा एक नए संस्करण HTTP पर अपने वेब सर्वर से वर्तमान संस्करण फ़ाइल पुन: प्राप्त करने, और संस्करण की तुलना द्वारा उपलब्ध होता है जब

  1. :

    उसके बाद, आप अपने आप को अपडेटर के इन भागों को प्रबंधित करना होगा ऐप के स्वयं के APP_VERSION में नंबर। इस क्वेरी को इस तरह से करने के लिए सुनिश्चित करें कि क्लाइंट मशीन में इंटरनेट एक्सेस नहीं है, और यह अनुरोध करने के दौरान जीयूआई को अवरुद्ध नहीं करता है (यदि कोई नेटवर्क समस्या है जो क्वेरी को प्रतीक्षा करने के लिए मजबूर करती है एक समय के लिए एक लंबा समय)।

  2. यदि कोई नया संस्करण उपलब्ध है, तो उपयोगकर्ता से यह पूछना कि वे अपडेट करना चाहते हैं, और यदि वे हाँ को अपडेटेड इंस्टॉलर को TEMP निर्देशिका में डाउनलोड करते हैं। आप जिस जीयूआई टूलकिट का उपयोग कर रहे हैं उसके आधार पर, डाउनलोड के दौरान प्रगति संवाद प्रदर्शित करने के लिए विभिन्न तंत्र हैं; यह एक अच्छा विचार है क्योंकि इंस्टॉलर कम से कम एक एमबी होने की संभावना है।
  3. अपने ऐप को बंद करना, एक विशेष अपडेट स्क्रिप्ट in the background चलाकर, फिर ऐप को फिर से शुरू करना।

अद्यतन स्क्रिप्ट मूल प्रक्रिया पूरी तरह से यह करने के लिए (सबसे आसान तरीका है मरने के लिए के लिए इंतजार करेंगे एक कमांड लाइन तर्क के रूप में मूल प्रक्रिया के पीआईडी ​​में गुजरती हैं और जब तक यह हो जाता है अद्यतन स्क्रिप्ट send a query signal 0 to that process हर दूसरे या तो है दूर।) फिर उपयोगकर्ता को "कृपया प्रतीक्षा करें ..." संवाद प्रदर्शित करते समय, शायद पृष्ठभूमि में इंस्टॉलर को चुपचाप चलाएं। एक बार इंस्टॉलर पूरा हो जाने और इसके रिटर्न कोड में सफलता की रिपोर्ट करने के बाद, अपडेटर आपके प्रोग्राम को पुनरारंभ कर सकता है।

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

प्लस, इनोसेटअप आमतौर पर सामान्य है। :-)

+0

यह जांचने के लिए एक और अधिक तकनीकी रूप से मीठा तरीका है कि आपका मौजूदा ऐप अभी भी खुला है या नहीं, क्या आपके ऐप को एक अस्थायी नाम पर एक रीड लॉक प्राप्त होता है जब भी यह चल रहा हो। यह अच्छा है क्योंकि यह एक असंभव लेकिन संभावित दौड़ स्थिति परिदृश्य से बचाता है जहां आपका ऐप अपने पीआईडी ​​को मुक्त करता है लेकिन एक और नया ऐप तुरंत उसी पीआईडी ​​लेता है। यह उपयोगकर्ता को आपके ऐप के कई उदाहरण शुरू करने से रोक देगा, जो अद्यतनकर्ता को भ्रमित कर सकता है। – DSimon

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