एक iPhone ऐप में पायथन एंबेडिंग


94

तो यह एक नई सहस्राब्दी है; Apple ने अपना हाथ लहराया है; अब iPhone (ऐप स्टोर) ऐप में पायथन इंटरप्रेटर को शामिल करना कानूनी है।

यह करने के बारे में कैसे जाना जाता है? सभी मौजूदा चर्चा (अनिश्चित रूप से) जेलब्रेकिंग को संदर्भित करती है। (पुराना सवाल: क्या मैं पायथन का उपयोग कर देशी आईफोन ऐप लिख सकता हूं )

यहाँ मेरा लक्ष्य एक PyObjC ऐप लिखना नहीं है, बल्कि एक नियमित ObjC ऐप लिखना है जो पायथन को एक एम्बेडेड लाइब्रेरी के रूप में चलाता है। फिर पायथन कोड देशी कोको कोड को वापस कॉल करेगा। यह "कंट्रोल लॉजिक पाइथन कोड" पैटर्न है।

क्या XCode में बनाया गया पायथन प्राप्त करने के लिए एक गाइड है, ताकि मेरा iPhone ऐप इसे लिंक कर सके? अधिमानतः एक छीन-डाउन पायथन, क्योंकि मुझे मानक पुस्तकालय के 90% की आवश्यकता नहीं होगी।

मैं शायद थ्रेडिंग और पायथन-एक्सटेंशन एपीआई का पता लगा सकता हूं; मैंने मैकओएस पर किया है। लेकिन केवल कमांड-लाइन कंपाइलरों का उपयोग करना, एक्सकोड नहीं।


जवाबों:


30

यह वास्तव में मायने नहीं रखता है कि आप पायथन का निर्माण कैसे करते हैं - आपको इसे Xcode में बनाने की आवश्यकता नहीं है, उदाहरण के लिए - लेकिन इससे कोई फर्क नहीं पड़ता कि उस बिल्ड का उत्पाद क्या है।

अर्थात्, आपको libPython.a जैसा कुछ बनाने की आवश्यकता है जिसे आपके आवेदन में सांख्यिकीय रूप से जोड़ा जा सकता है। एक बार आपके पास .A, कि आपके आवेदन के लिए Xcode प्रोजेक्ट में जोड़ा जा सकता है और, वहां से, यह आपके बाकी ऐप की तरह ही लिंक और हस्ताक्षरित होगा।

IIRC (जब से मैंने हाथ से अजगर का निर्माण किया है तब से यह एक समय है) आउट-ऑफ-द-बॉक्स अजगर एक libPython.a (और अन्य पुस्तकालयों का एक गुच्छा) का निर्माण करेगा, यदि आप इसे सही तरीके से कॉन्फ़िगर करते हैं।

बेशक, आपका 86 अंक एआरएम के लिए आपके 86 बॉक्स से क्रॉस-संकलन करने वाला है । पायथन एक ऑटोकॉन्फ़ आधारित परियोजना है और ऑटोकॉन्फ़ क्रॉस-संकलन के लिए बट में दर्द है।

जैसा कि आप सही ढंग से कहते हैं, यह छोटा बनाना महत्वपूर्ण होगा।

आश्चर्य की बात नहीं, या तो यह है कि आप ऐसा करने वाले पहले व्यक्ति नहीं हैं, लेकिन iOS के लिए नहीं। पायथन को iOS चलाने वालों की तुलना में बहुत कम सक्षम उपकरणों में निचोड़ा गया है। जब मैं गुगली कर रहा था तो मुझे लिंक के एक गुच्छा के साथ एक धागा मिला; यह उपयोगी हो सकता है

इसके अलावा, आप pyobjc-dev सूची में शामिल होना चाह सकते हैं । जब आप PyObjC आधारित एप्लिकेशन को लक्षित नहीं कर रहे हैं (जो, btw, एक अच्छा विचार है - PyObjC के पास आईओएस फ्रेंडली होने से पहले एक लंबा रास्ता तय करना होगा), PyObjC समुदाय इस और रोनाल्ड के बारे में, किसी से भी चर्चा कर रहा है, संभवतः इस क्षेत्र में सबसे अधिक जानकार व्यक्ति है। ध्यान दें कि PyObjC को पोर्ट करने से पहले iOS समस्या पर एम्बेडेड Python को हल करना होगा। उनकी शर्त आपकी आवश्यकता है, जैसा कि यह था।


लिंक के लिए धन्यवाद। (मैंने इस परियोजना के बहुत पहले संस्करण के लिए शार्प ज़ोरस पर पायथन का इस्तेमाल किया , लेकिन वह अजगर 1.6 था और किसी और ने पैकेजिंग किया ...)
एंड्रयू प्लॉटकिन

4
मैंने एक बार पायथन को सोनी के पीएसपी में पोर्ट किया; शायद कुछ तोड़फोड़ का इतिहास आपकी मदद करेगा। हालांकि इसका जवाब बिल्कुल नहीं है। यहाँ: python-psp.net/trac
fraca7

22

मैंने github पर एक बहुत ही रफ स्क्रिप्ट रखी है जो आईफ़ोन और सिम्युलेटर के लिए python2.6.5 लाती है और बनाता है।

http://github.com/cobbal/python-for-iphone

कार्य प्रगति पर है

लगभग 2 साल बाद कुछ हद तक निराशाजनक अपडेट: (जीआईएटीबी पर आरईएडीएमई से नकल)

इस परियोजना को वास्तव में मेरी संतुष्टि के लिए iPhone पर चलने वाला अजगर कभी नहीं मिला, और मैं इस स्तर पर किसी भी गंभीर परियोजना के लिए इसका उपयोग करने की अनुशंसा नहीं कर सकता।

सबसे विशेष रूप से गायब है pyobjc सपोर्ट (जो कि iPhone को पोर्ट करने के लिए बहुत कठिन हो जाता है क्योंकि यह अधिक प्लेटफ़ॉर्म-विशिष्ट कोड पर निर्भर करता है)

इसके अलावा लापता सांख्यिकीय रूप से संकलित मॉड्यूल की क्षमता है, (सभी को वर्तमान में dylibs के रूप में बनाया गया है जो विकास के लिए काम करता है, लेकिन मेरे ज्ञान के लिए ऐप स्टोर में अनुमति नहीं दी जाएगी)

इस बिंदु पर यह परियोजना ज्यादातर मेरे लिए किसी भी होशियार व्यक्ति के लिए एक शुरुआती बिंदु होने का मतलब है जो उपरोक्त मुद्दों से निपटना चाहता है और इससे निपट सकता है।

मैं वास्तव में चाहता हूं कि पायथन में पूरी तरह से ऐप लिखना व्यावहारिक हो, लेकिन इस समय यह असंभव लगता है।


धन्यवाद! मुझे कुछ दिनों तक इसे देखने का मौका नहीं मिलेगा, लेकिन मैं इसे जल्द ही आज़माऊंगा।
एंड्रयू प्लॉटकिन

यदि pyobjcसंकलन करना मुश्किल है, तो क्या इसका उपयोग करना संभव है ctypes? उस स्थिति में यह उत्तर एक सुराग हो सकता है (यह महसूस करना कि यह एक बड़े और दर्दनाक काम की शुरुआत होगी, लेकिन अभी भी)।
जैकब ऑस्करसन

10

मैंने भी ऐसा प्रोजेक्ट शुरू किया। यह अपनी सरलीकृत संकलन स्क्रिप्ट के साथ आता है ताकि आपके क्रॉस संकलित स्थिर पुस्तकालय को प्राप्त करने के लिए ऑटोकॉन्फ़ के साथ गड़बड़ करने की आवश्यकता न हो। यह कुछ सामान्य मॉड्यूल के साथ पायथन के पूरी तरह से निर्भरता-मुक्त स्थिर पुस्तकालय बनाने में सक्षम है। इसे आसानी से एक्स्टेंसिबल होना चाहिए।

https://github.com/albertz/python-embedded/


मुझे काम करने के लिए आपकी संकलन नहीं मिलती। यह संकलन करता है, लेकिन कुछ अंतर्निहित मॉड्यूल की कमी है जैसे '-collections'। कोई विचार?
बाइजन

मैंने सभी मूल C मॉड्यूल को शामिल नहीं किया। बस इसे संशोधित करें।
अल्बर्ट

दिनांकित लगता है ... केवल iOS 4.3 के साथ काम करता है? क्या आप यह दस्तावेज़ कर सकते हैं कि इसे और अधिक वर्तमान संस्करणों के साथ कैसे काम करें?
ArtOfWarfare

@ArtOfWarfare: कुछ ही समय में इसका उपयोग नहीं किया गया, इसलिए इसे और अधिक हाल के संस्करणों के साथ काम नहीं करना चाहिए? यदि आप कोई समस्या देखते हैं तो शायद GitHub पर एक बग रिपोर्ट करें।
अल्बर्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.