2012-02-23 15 views
7

क्या पाइथन अनुप्रयोगों को तैनात करना संभव है जैसे कि आप स्रोत कोड जारी नहीं करते हैं और आपको यह सुनिश्चित करने की ज़रूरत नहीं है कि ग्राहक के पास पाइथन स्थापित है?पायथन अनुप्रयोगों को तैनात करना

मुझे लगता है कि शायद कुछ इंस्टॉलेशन प्रक्रिया है जो सिर्फ .pyc फ़ाइलों से एक पायथन ऐप चला सकती है और एक साझा लाइब्रेरी जिसमें दुभाषिया या ऐसा कुछ है?

मूल रूप से मैं पाइथन - उच्च उत्पादकता इत्यादि जैसी भाषा के विकास लाभ प्राप्त करने के इच्छुक हूं लेकिन यह नहीं देख सकता कि आप इसे पेशेवर रूप से कैसे एक ग्राहक को तैनात कर सकते हैं जहां आप नहीं जानते कि मशीन कैसे सेट की जाती है ऊपर और आप निश्चित रूप से स्रोत वितरित नहीं कर सकते हैं।

पाइथन में पेशेवर सॉफ्टवेयर घर कैसे विकसित करते हैं (या शायद जवाब यह है कि वे नहीं करते हैं)?

+0

पीएस मुझे py2exe और सभी चीजों के बारे में पता है लेकिन यह एक हैक प्रकार के समाधान की तरह लगता है, उदा। हर बार जब आप एक ऐप लिखते हैं तो पूरे दुभाषिया में संकलन करना थोड़ा सा सुरुचिपूर्ण है – bph

+2

प्रेरणा के लिए यह प्रश्न पढ़ें: http://stackoverflow.com/questions/2678180/how-does-dropbox-use-python-on-windows- और-os-x –

+0

क्या कोई और समान भाषा है जिसे मूल बाइनरी में संकलित किया जा सकता है? डी शायद? विगेट्स या क्यूटी जैसे लोकप्रिय जीयूआई पैकेज के साथ बाइंडिंग के साथ अच्छी भाषा होगी – bph

उत्तर

13
  1. आप अपने स्रोत कोड कानूनी तौर पर, नहीं तकनीकी रूप की रक्षा करना। पीई फाइलों को वितरित करना वास्तव में एक बड़ा सौदा नहीं है। केवल तकनीकी समाधान यहाँ आप नहीं चाहते हैं अपने कार्यक्रम जहाज के लिए नहीं

  2. है (के रूप में सॉफ्टवेयर इंटरनेट पूरी तरह से अधिक बार स्थानीय स्तर पर स्थापित करने के बजाय अधिक प्रदान की जाती है, जो वास्तव में और अधिक लोकप्रिय इन दिनों हो रहा है।) उपयोगकर्ता को पाइथन स्थापित करना है लेकिन पाइथन प्रोग्राम चलाने के लिए चाहते हैं, तो आपको पायथन को बंडल करना होगा। ऐसा करने का आपका प्रतिरोध मेरे लिए काफी अजीब लगता है। जावा प्रोग्रामों को या तो JVM की उपस्थिति को बंडल या अनुमानित करना होगा। सी कार्यक्रमों को या तो libc की उपस्थिति (आमतौर पर बाद वाले), आदि की बंडल या अनुमान लगाना पड़ता है। आपको जो चाहिए उसे उपयोग करने के बारे में हैकी कुछ भी नहीं है।

  3. व्यावसायिक अजगर डेस्कटॉप सॉफ्टवेयर बंडल अजगर, या तो py2exe/cx_Freeze/कुछ घर में बात की तरह कुछ वही चीज़ के माध्यम से या अजगर (जिसमें मामले अजगर एक निष्पादन एक पुस्तकालय के बजाय साथ आता है) embedding के माध्यम से। पूर्व दृष्टिकोण आमतौर पर बहुत अधिक शक्तिशाली और मजबूत होता है।

+0

वास्तव में प्रतिरोधी नहीं है - बस विकल्पों के माध्यम से सोचने की कोशिश कर रहा है, खासकर ग्राहक के लिए कम से कम परेशानी क्या है। बंडलिंग से आपका मतलब है कि ग्राहक को अपने प्लेटफ़ॉर्म के लिए एक पायथन इंस्टॉलर प्रदान करें और उन्हें हमारे कोड को चलाने से पहले इसे इंस्टॉल करने के लिए कहें? – bph

+0

ऐसे कई उदाहरण हैं जहां आपको तकनीकी दृष्टिकोण से स्रोत की सुरक्षा के बारे में सावधान रहना होगा, उदा। रक्षा क्षेत्र – bph

+0

@Hiett, नहीं, मेरा मतलब यह नहीं है कि उपयोगकर्ता पाइथन स्टॉक इंस्टॉल करें और फिर अपना प्रोग्राम इंस्टॉल करें। जब तक आपका उत्पाद मुख्य रूप से पायथन पुस्तकालय के रूप में उपयोग नहीं किया जाता है, तो यह समझ में नहीं आता है। मुझे यकीन नहीं है कि आपने क्यों सोचा था कि उपयोगकर्ता को अपने प्लेटफ़ॉर्म (केवल एक बार) के लिए सामान्य इंस्टॉल प्रक्रिया के माध्यम से जाने के अलावा कुछ और करना है। –

1

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

+0

हम वेब ऐप्स विकसित नहीं कर रहे हैं - अगर केवल यह आसान था – bph

+0

@Hiett: अधिक से अधिक केवल इतना ही संभव था "डेस्कटॉप" सॉफ्टवेयर अब वेब सॉफ्टवेयर के रूप में उपलब्ध है। क्या आप निश्चित हैं * आप जो कर रहे हैं वह वेब ऐप के रूप में नहीं किया जा सकता है? –

+0

एलओएल ... कितने लोग सोचते हैं कि केवल ग्राहक ही है - यदि आप पाइथन में एक वेब ऐप (या कोई सर्वर-साइड ऐप) विकसित करते हैं, और इसे बेचना चाहते हैं, और पूरे स्रोत कोड को जारी नहीं करना चाहते हैं, तो क्या तुम क्या करते हो? एक और वेब (सर्वर) ऐप लिखें? चलो ... –

3

अच्छा, यह निर्भर करता है कि आप क्या करना चाहते हैं। यदि "स्रोत कोड जारी नहीं किया जा रहा है" तो आपका मतलब है कि "ग्राहक किसी भी तरह से स्रोत कोड तक पहुंचने में सक्षम नहीं होना चाहिए", ठीक है, आप हारने वाली लड़ाई से लड़ रहे हैं। यहां तक ​​कि सी में लिखे गए कार्यक्रम भी बाद में इंजीनियर हो सकते हैं। यदि आपको डर है कि कोई आपसे चोरी करेगा, तो उन्हें अनुबंध पर हस्ताक्षर करें और परेशानी होने पर उनका मुकदमा करें।

लेकिन यदि आपका मतलब है कि "ग्राहक को पाइथन फाइलों की परवाह नहीं करनी चाहिए, और उन्हें आकस्मिक रूप से एक्सेस करने में सक्षम नहीं होना चाहिए", तो आप अपने पायथन एप्लिकेशन को निष्पादन योग्य में बदलने के लिए cx_Freeze जैसे समाधान का उपयोग कर सकते हैं।

6

हां, इंस्टॉलेशन पैकेज बनाना संभव है। py2exe, cx_freeze और अन्य के लिए देखें।

नहीं, स्रोत कोड को पूरी तरह से सुरक्षित रखना संभव नहीं है। डिकंपाइल करने के हमेशा तरीके हैं।
मूल स्रोत कोड .pyc फ़ाइलों से प्राप्त किया जा सकता है यदि कोई इसे करना चाहता है। कोड obfuscation कोड के साथ कुछ करने के लिए और अधिक कठिन बना देगा।

3

मैं कोई भी अब से पहले इस उल्लेख किया हैरान हूँ, लेकिन Cython इस समस्या का व्यवहार्य समाधान की तरह लगता है।यह आपके पायथन कोड और transpile को सीपीथॉन संगत सी कोड में ले जाएगा। आपको एक छोटी गति वृद्धि भी मिलती है (~ 25% पिछली बार मैंने चेक किया) क्योंकि इसे केवल पायथन बाइट कोड के बजाय मूल मशीन कोड में संकलित किया जाएगा। आपको अभी भी यह सुनिश्चित करने की ज़रूरत है कि उपयोगकर्ता के पास पाइथन स्थापित है (या तो इसे उपयोगकर्ता को पूर्व-आवश्यकता को उपयोगकर्ता से निपटने के लिए, या इंस्टॉलर प्रक्रिया के हिस्से के रूप में बंडल करने के द्वारा इसे हटाकर)। इसके अलावा, आपको शुद्ध पायथन में अपने आवेदन का कम से कम एक छोटा हिस्सा होना चाहिए: मुख्य फ़ंक्शन में हुक।

तो आप कुछ इस तरह बुनियादी आवश्यकता होगी:

import cython_compiled_module 

if __name__ == '__main__': 
    cython_compiled_module.main() 

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

जैसा कि अन्य ने कहा है, यहां तक ​​कि परिणामी संकलित सी कोड भी थोड़ा प्रयास के साथ विघटित हो सकता है, लेकिन यह संभवतया आप जिस तरह से उम्मीद कर रहे थे, उस प्रकार के असंतोष के प्रकार के करीब है।

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