पायथन में अपनी मौजूदा सी या सी ++ कार्यक्षमता को लपेटने के कई तरीके हैं। इस खंड में, हम यह देखने जा रहे हैं कि हम SWIG के साथ C/C++ कार्यक्षमता को कैसे लपेट सकते हैं। अजगर में c/c++ कार्यक्षमता को लपेटने के लिए अन्य विकल्प नीचे दिए गए हैं।
- मैन्युअल रैपिंग
- सी कोड को रैप करने के लिए पाइरेक्स का उपयोग करना।
- Ctypes
- एसआईपी
- पायथन को बढ़ावा दें
SWIG (सिंपल रैपर इंटरफेस जेनरेटर) पर्ल, पायथन, पीएचपी, रूबी, टीसीएल, सी #, कॉमन लिस्प (सीएलआईएसपी, एलेग्रो, सीएल, यूएफएफआई, सीएफएफआई), जावा, मोडुला -3 सहित कई अन्य भाषाओं के साथ सी कोड को लपेटने में सक्षम है। ओसीएएमएल। स्विग भी कई व्याख्या और संकलित योजना कार्यान्वयन का समर्थन करता है (जैसे गुइल, एमजेस्कीम, चिकन) समर्थित हैं।
लेकिन हम इसके कार्यान्वयन के बारे में यहाँ केवल अजगर के साथ चर्चा करेंगे।
SWIG जो मूल रूप से एक मैक्रो भाषा है जो C कोड को समझती है और फिर आपकी पसंद की भाषा के लिए रैपर कोड थूक देगी।
इंस्टॉलेशन
मैं “swigwin-3.0.12” विंडोज़ स्विग इंस्टालर का उपयोग कर रहा हूँ, आप इसे यहाँ से डाउनलोड कर सकते हैं:
https://www.swig.org/download.html
इसके अलावा विंडोज़ में स्विग प्रोग्राम चलाने के लिए आपको "माइक्रोसॉफ्ट विजुअल स्टूडियो 14.0" या उच्चतर की आवश्यकता हो सकती है।
स्विग के उपयोग को स्पष्ट करने के लिए, मान लीजिए कि हमारे पास कुछ सी फ़ंक्शन है और हम इसे अन्य भाषाओं जैसे टीसीएल, पर्ल, पायथन (मैं पाइथन के साथ बातचीत कर रहा हूं), जावा और सी # में जोड़ना चाहते हैं।
मेरी c फ़ाइल example.c है
#include "example.h" int fact(int n) { if (n < 0) { /* This should probably return an error, but this is simpler */ return 0; } if (n == 0) { return 1; } else { /* testing for overflow would be a good idea here */ return n * fact(n-1); } }
इंटरफ़ेस फ़ाइल:
अब, यदि आप अपनी पसंदीदा भाषा में c फ़ाइल जोड़ना चाहते हैं, तो आपको एक “इंटरफ़ेस फ़ाइल” लिखनी होगी जो SWIG का इनपुट है। example.c के लिए मेरी इंटरफ़ेस फ़ाइल है,
example.i
/* File: example.i */ %module example %{ #define SWIG_FILE_WITH_INIT #include "example.h" %} %include "example.h"
हैडर फ़ाइल
हमने अपनी पिछली उदाहरण फ़ाइल हेडर फ़ाइल शामिल की है। तो यहाँ मेरी हेडर फ़ाइल है:
example.h
int fact(int n);
सेटअप फ़ाइल:
from distutils.core import setup, Extension example_module = Extension('_example', sources=['example_wrap.c', 'example.c'], ) setup (name = 'example', version = '0.1', author = "SWIG Docs", description = """Simple swig example from docs""", ext_modules = [example_module], py_modules = ["example"], )
रैपर बनाना
अब हम अपनी इंटरफ़ेस फ़ाइल (example.i) का उपयोग करके पायथन रैपर बनाने जा रहे हैं। अपने फ़ंक्शन के लिए रैपर बनाने के लिए, नीचे दिए गए कमांड को आप CLI पर चलाएँ।
>swig -python example.i
अब यदि आप अपनी वर्तमान कार्यशील निर्देशिका देखते हैं, तो अभी एक नई फ़ाइल बनाई जाती है। यदि आप उपरोक्त फ़ाइल नाम का उपयोग मेरे रूप में कर रहे हैं, तो आपकी रैपर फ़ाइल "example_wrap.c" होगी अन्यथा रैपर फ़ाइल का नाम कुछ इस तरह होगा
“Your_File_Name” + “_wrapper” + “Your_language_extension”
इसलिए यदि आपकी उदाहरण फ़ाइल test.c है तो आपकी रैपर फ़ाइल “test_wrapper.c” होगी।
एक्सटेंशन बनाया
>python setup.py build_ext running build_ext building '_example' extension creating build creating build\temp.win32-3.6 creating build\temp.win32-3.6\Release ….
यही अब हम अपनी सी भाषा को पायथन भाषा में लपेटने में सक्षम हैं। इसे जांचने के लिए आप सीधे चला सकते हैं या वर्चुअल वातावरण बना सकते हैं और अलग से चला सकते हैं।
C:\Users\rajesh>mkdir swigExample && cd swigExample C:\Users\rajesh\swigExample>virtualenv swigenv Using base prefix 'c:\\python\\python361' New python executable in C:\Users\rajesh\swigExample\swigenv\Scripts\python.exe Installing setuptools, pip, wheel...done. C:\Users\rajesh\swigExample>.\swigenv\Scripts\activate (swigenv) C:\Users\rajesh\swigExample>python
बस, अब अपने फ़ाइल आयात फ़ंक्शन से और इसे चलाएँ।
>>> from example import fact >>> fact(6) 720