एडम मटन और अन्य लोगों के दावे के विपरीत, आप वास्तव में साइथन का उपयोग करके एक एकल निष्पादन योग्य बाइनरी फ़ाइल बना सकते हैं , शुद्ध पायथन (.py) फ़ाइल से।
हां, साइथन का उपयोग करने के लिए कहा गया है - CPython अजगर रनटाइम के लिए लेखन C / C ++ एक्सटेंशन मॉड्यूल को सरल बनाने के तरीके के रूप में।
लेकिन, इस टिप्पणी में nudzo के रूप में , आप --embed
कमांड लाइन प्रॉम्प्ट पर स्विच का उपयोग कर सकते हैं ।
यहाँ एक अत्यंत सरल उदाहरण है। मैं python3 और cython3 का उपयोग करते हुए एक डेबियन सिड वर्कस्टेशन से इसे सुधार रहा हूं।
सुनिश्चित करें कि आपके पास पहले से स्थापित अजगर-देव या अजगर -देव पैकेज हैं।
1) एक बहुत ही सरल पायथन प्रोग्राम बनाएं जिसका नाम है hello.py
$ बिल्ली hello.py
प्रिंट ("हैलो वर्ल्ड!")
2) C में अपने अजगर कार्यक्रम को संकलित करने के लिए साइथन का उपयोग करें ...
cython3 --embed -o hello.c hello.py
3) हैलो नामक एक निष्पादन योग्य फ़ाइल में hello.c संकलित करने के लिए GCC का उपयोग करें ...
gcc -Os -I /usr/include/python3.3m -o hello hello.c -lpython3.3m -lpthread -lm -lutil -ldl
4) आप हैलो नामक एक फ़ाइल के साथ समाप्त ...
$ फ़ाइल हैलो
हैलो: जीएनयू / लिनक्स 2.6.32, बिल्डआईडी [sha1] = 006f455a5a26f1949c6ed051df9cbd4433e1ac23 के लिए ELF 64-बिट LSB निष्पादन योग्य, x86-64, संस्करण 1 (SYSV), गतिशील रूप से जुड़ा हुआ (साझा उपयोग का उपयोग करता है), नहीं छीन लिया गया।
$ ldd hello
linux-vdso.so.1 (0x00007fff273fe000)
libpython3.3m.so.1.0 => /usr/lib/x86_64-linux-gnu/libpython3.3m.so.1.0 (0x00007fc61dc2c000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007fc61da0f000)
libm.so.6 => /lib/x86_64-linux-gnu/libm.so.6 (0x00007fc61d70b000)
libutil.so.1 => /lib/x86_64-linux-gnu/libutil.so.1 (0x00007fc61d508000)
libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007fc61d304000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007fc61cf5a000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007fc61cd52000)
libexpat.so.1 => /lib/x86_64-linux-gnu/libexpat.so.1 (0x00007fc61cb28000)
libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007fc61c90f000)
/lib64/ld-linux-x86-64.so.2 (0x00007fc61e280000)
इस मामले में, निष्पादन योग्य गतिशील रूप से मेरे डेबियन सिस्टम पर पायथन 3.3 से जुड़ा हुआ है।
5) चलाने हैलो ...
$
नमस्ते दुनिया!
जैसा कि आप देख सकते हैं, इस पद्धति का उपयोग करके आप मूल रूप से अपने शुद्ध पायथन अनुप्रयोगों को निष्पादन योग्य, संकलित ऑब्जेक्ट कोड में परिवर्तित करने के लिए साइथन का उपयोग कर सकते हैं।
मैं इस पद्धति का उपयोग बहुत अधिक जटिल अनुप्रयोगों के लिए कर रहा हूं - उदाहरण के लिए, एक पूर्ण विकसित पायथन / PySide / Qt अनुप्रयोग।
पायथन के विभिन्न संस्करणों के लिए, आप जीसीसी को सिलाई करते हैं -I
और -l
सूट करने के लिए स्विच करते हैं।
फिर आप निष्पादन योग्य को वितरण (.deb, आदि) फ़ाइल के रूप में पैकेज कर सकते हैं, बिना पायथन / PySide / Qt फ़ाइलों को पैकेज किए बिना - लाभ यह है कि आपका एप्लिकेशन अभी भी वितरण अपडेट के बाद भी चलने में सक्षम होना चाहिए उस वितरण पर अजगर के संस्करण, आदि।