Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> सी प्रोग्रामिंग

SWIG का उपयोग करके पायथन के लिए C/C++ लपेटना

पायथन में अपनी मौजूदा सी या सी ++ कार्यक्षमता को लपेटने के कई तरीके हैं। इस खंड में, हम यह देखने जा रहे हैं कि हम 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

  1. सी/सी++ एनएच कैटलन नंबर के लिए प्रोग्राम?

    कैटलन संख्याएं संख्याओं का एक क्रम है। कैटलन संख्याएं प्राकृतिक संख्याओं का एक क्रम बनाती हैं जो गिनती की विभिन्न समस्याओं में होती हैं, जिनमें अक्सर पुनरावर्ती-परिभाषित वस्तुएं शामिल होती हैं। सीएन लंबाई 2n के डाइक शब्दों की संख्या है। एक डाइक शब्द एक स्ट्रिंग है जिसमें एन एक्स और एन वाई शामि

  1. वेबसाइट अवरोधक पायथन का उपयोग कर

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

  1. पायथन का उपयोग करके किसी फ़ाइल को कैसे हटाएं?

    आप ओएस मॉड्यूल में फ़ंक्शन के साथ एक फ़ाइल या एक खाली फ़ोल्डर को हटा सकते हैं। उदाहरण के लिए, यदि आप किसी फ़ाइल को हटाना चाहते हैं my_file.txt, >>> import os >>> os.remove('my_file.txt') os.remove का तर्क पूर्ण या सापेक्ष पथ होना चाहिए।