পাইথনে আপনার বিদ্যমান C বা C++ কার্যকারিতা মোড়ানোর একাধিক উপায় রয়েছে। এই বিভাগে, আমরা দেখতে যাচ্ছি কিভাবে আমরা SWIG এর সাথে C/C++ কার্যকারিতা মোড়ানো করতে পারি। পাইথনে c/c++ কার্যকারিতা মোড়ানোর জন্য নীচে অন্যান্য বিকল্প রয়েছে।
- ম্যানুয়াল মোড়ানো
- সি কোড মোড়ানোর জন্য পাইরেক্স ব্যবহার করা।
- প্রকারগুলি
- SIP
- বুস্ট পাইথন
SWIG (সিম্পল র্যাপার ইন্টারফেস জেনারেটর) পার্ল, পাইথন, পিএইচপি, রুবি, টিসিএল, সি#, কমন লিস্প (সিএলআইএসপি, অ্যালেগ্রো, সিএল, ইউএফএফআই, সিএফএফআই), জাভা, মডুলা-৩ এবং সহ অসংখ্য অন্যান্য ভাষার সাথে সি কোড র্যাপ করতে সক্ষম। OCAML সুইগ একাধিক ব্যাখ্যা করা এবং সংকলিত স্কিম বাস্তবায়ন (যেমন গুইল, এমজেডস্কিম, চিকেন) সমর্থন করে।
কিন্তু আমরা এখানে শুধুমাত্র পাইথনের সাথে এর বাস্তবায়ন নিয়ে আলোচনা করব।
SWIG যা মূলত একটি ম্যাক্রো ভাষা যা C কোড বুঝতে পারে এবং তারপর আপনার পছন্দের ভাষার জন্য র্যাপার কোড বের করে দেবে।
ইনস্টলেশন
আমি "swigwin-3.0.12" উইন্ডোজ সুইগ ইনস্টলার ব্যবহার করছি, আপনি এটি থেকে ডাউনলোড করতে পারেন:
https://www.swig.org/download.html
তা ছাড়া আপনার উইন্ডোজে সুইগ প্রোগ্রাম চালানোর জন্য "Microsoft Visual Studio 14.0" বা উচ্চতর প্রয়োজন হতে পারে৷
সুইগ-এর ব্যবহার ব্যাখ্যা করার জন্য, ধরুন আমাদের কিছু c ফাংশন আছে এবং আমরা এটিকে Tcl, Perl, Python (আমি পাইথনের সাথে ইন্টারঅ্যাক্ট করছি), Java এবং C# এর মতো অন্যান্য ভাষায় যোগ করতে চাই।
আমার c ফাইল হল example.c
#include "example.h"int fact(int n) { if (n <0) { /* এটি সম্ভবত একটি ত্রুটি রিটার্ন করবে, কিন্তু এটি সহজ */ রিটার্ন 0; } যদি (n ==0) { রিটার্ন 1; } else { /* ওভারফ্লো পরীক্ষা করা এখানে একটি ভাল ধারণা হবে */ return n * fact(n-1); }}
ইন্টারফেস ফাইল:
এখন, আপনি যদি আপনার পছন্দের ভাষায় আপনার c ফাইল যোগ করতে চান, তাহলে আপনাকে একটি "ইন্টারফেস ফাইল" লিখতে হবে যা SWIG-তে ইনপুট। example.c-এর জন্য আমার ইন্টারফেস ফাইল হল,
example.i
/* ফাইল:example.i */%module example%{ #define SWIG_FILE_WITH_INIT #include "example.h"%}%include "example.h"
হেডার ফাইল
আমরা আমাদের পূর্ববর্তী উদাহরণ ফাইল হেডার ফাইল অন্তর্ভুক্ত করেছি। তাই এখানে আমার হেডার ফাইল:
example.h
int fact(int n);
সেটআপ ফাইল:
distutils.core আমদানি সেটআপ থেকে, Extensionexample_module =এক্সটেনশন('_example', Source=['example_wrap.c', 'example.c'],)সেটআপ (নাম ='উদাহরণ', সংস্করণ ='0.1', লেখক ="SWIG ডক্স", বিবরণ ="""ডক্স থেকে সরল সুইগ উদাহরণ""", 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_extrunning build_extbuilding '_example' এক্সটেনশন তৈরি করে buildcreating build\temp.win32-3.6creating build\temp.win32-3.6\Release...
এটাই এখন আমরা আমাদের সি ল্যাঙ্গুয়েজকে পাইথন ল্যাঙ্গুয়েজে মোড়ানো করতে সক্ষম। এটি পরীক্ষা করতে আপনি সরাসরি চালাতে পারেন বা একটি ভার্চুয়াল পরিবেশ তৈরি করতে পারেন এবং আলাদাভাবে চালাতে পারেন৷
C:\Users\rajesh>mkdir swigExample &&cd swigExampleC:\Users\rajesh\swigExample>virtualenv swigenv ব্যবহার করে বেস উপসর্গ 'c:\\python\\python361' নতুন পাইথন এক্সিকিউটেবল swigenv\Scripts\python.exe সেটআপ টুল ইনস্টল করা হচ্ছে, পিপ, হুইল... সম্পন্ন করা হচ্ছে।এটাই, এখন আপনার ফাইল ইম্পোর্ট ফাংশন থেকে এবং এটি চালান।
>>> উদাহরণ থেকে import fact>>> fact(6)720