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

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


आपके मौजूदा C या C++ कार्यक्षमता को Python में रैप करने के कई तरीके हैं। इस सेक्शन में, हम देखेंगे कि हम SWIG के साथ C/C++ कार्यक्षमता को कैसे रैप कर सकते हैं। Python में c/c++ कार्यक्षमता रैप करने के अन्य विकल्प नीचे दिए गए हैं।

  • मैन्युअल रैपिंग
  • C कोड रैप करने के लिए pyrex का उपयोग
  • Ctypes
  • SIP
  • Boost Python

SWIG (Simple Wrapper Interface Generator) C कोड को Perl, Python, PHP, Ruby, Tcl, C#, Common Lisp (CLISP, Allegro, CL, UFFI, CFFI), Java, Modula-3 और OCAML सहित कई अन्य भाषाओं के साथ रैप करने में सक्षम है। Swig कई इंटरप्रेटेड और कंपाइल्ड Scheme इम्प्लीमेंटेशन्स (जैसे Guile, MzScheme, Chicken) का भी समर्थन करता है।

लेकिन हम यहां केवल Python के साथ इसके कार्यान्वयन पर चर्चा करेंगे।

SWIG मूल रूप से एक मैक्रो भाषा है जो C कोड को समझती है और फिर आपकी पसंद की भाषा के लिए रैपर कोड निकाल देती है।

इंस्टॉलेशन

मैं "swigwin-3.0.12" Windows SWIG इंस्टॉलर का उपयोग कर रहा हूं, आप इसे यहां से डाउनलोड कर सकते हैं:

https://www.swig.org/download.html

इसके अलावा आपको Windows में SWIG प्रोग्राम चलाने के लिए "Microsoft Visual Studio 14.0" या उच्चतर की आवश्यकता हो सकती है।

SWIG के उपयोग को स्पष्ट करने के लिए, मान लीजिए हमारे पास कुछ C फंक्शन हैं और हम इसे Tcl, Perl, Python (मैं Python के साथ इंटरैक्ट कर रहा हूं), Java और C# जैसी अन्य भाषाओं में जोड़ना चाहते हैं।

मेरी C फाइल example.c है

#include "example.h"

int fact(int n) {
    if (n < 0) {
        /* यह शायद एक त्रुटि लौटानी चाहिए, लेकिन यह सरल है */
        return 0;
    }
    if (n == 0) {
        return 1;
    } else { /* यहां ओवरफ्लो के लिए टेस्ट करना एक अच्छा विचार होगा */
        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) का उपयोग करके Python रैपर बनाने जा रहे हैं। अपने फंक्शन के लिए रैपर बनाने के लिए, बस अपने 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 भाषा को Python भाषा में रैप करने में सक्षम हैं। इसे जांचने के लिए आप सीधे चला सकते हैं या एक वर्चुअल एनवायरनमेंट बना सकते हैं और अलग से चला सकते हैं।

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. nवीं कैटलन संख्या (nth Catalan Number) के लिए C/C++ प्रोग्राम? nवीं कैटलन संख्या (nth Catalan Number) के लिए C/C++ प्रोग्राम?

    कैटलन संख्याएं (Catalan numbers) संख्याओं का एक अनुक्रम है। कैटलन संख्याएं प्राकृतिक संख्याओं का एक अनुक्रम बनाती हैं जो विभिन्न गणना समस्याओं में होती हैं, अक्सर पुनरावर्ती रूप से परिभाषित वस्तुओं से जुड़ी होती हैं। Cₙ लंबाई 2n के डाइक शब्दों (Dyck words) की संख्या है। एक डाइक शब्द n Xs और n Ys

  1. पायथन का उपयोग करके वेबसाइट ब्लॉकर पायथन का उपयोग करके वेबसाइट ब्लॉकर

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

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

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