C++ Academy · पाठ

pybind11 के माध्यम से Python को C++ से बुलाना

pybind11 से C++ code को Python module के रूप में wrap करें।

पाठ 2, कुल 4 में से14 चरण

pybind11 के माध्यम से Python को C++ से बुलाना, CoddyKit पर C++ Academy का एक निःशुल्क पाठ है। यह 4 में से 2वाँ पाठ है। इस अध्ययन पथ के 3 तक कोई भी पाठ पूरा पढ़ना निःशुल्क है — इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ व्यावहारिक अभ्यास भी उपलब्ध कराता है। यह C++ Academy सीखने के मार्ग का हिस्सा है और आपकी प्रगति वेब तथा CoddyKit ऐप पर सिंक होती रहती है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

pybind11 क्यों?

pybind11 एक हेडर-ओनली लाइब्रेरी है, जो बहुत कम अतिरिक्त कोड के साथ C++ कोड के लिए Python बाइंडिंग बनाती है। इसका उपयोग SciPy, TensorFlow और कई अन्य प्रोजेक्ट करते हैं।

एक न्यूनतम मॉड्यूल

PYBIND11_MODULE मैक्रो के साथ एक ही फ़ाइल में Python मॉड्यूल परिभाषित करें।

#include <pybind11/pybind11.h>
namespace py = pybind11;

int add(int a, int b) { return a + b; }

PYBIND11_MODULE(mymodule, m) {
    m.def("add", &add, "Add two integers");
}

मॉड्यूल बनाना

इसे Python एक्सटेंशन मॉड्यूल के रूप में बनाएँ — आमतौर पर CMake या setuptools के साथ।

# CMake
find_package(pybind11 REQUIRED)
pybind11_add_module(mymodule mymodule.cpp)

Python से उपयोग करना

किसी भी Python मॉड्यूल की तरह इम्पोर्ट करके उपयोग करें।

# Python
import mymodule
print(mymodule.add(2, 3))   # 5

क्लास को उजागर करना

C++ क्लास को बाइंड करने के लिए py::class_ का उपयोग करें। कंस्ट्रक्टर, विधियाँ और प्रॉपर्टी सभी Python के समकक्षों में मैप हो जाते हैं।

class Point {
public:
    Point(int x, int y) : x_(x), y_(y) {}
    int x() const { return x_; }
    int y() const { return y_; }
private:
    int x_, y_;
};

PYBIND11_MODULE(geom, m) {
    py::class_<Point>(m, "Point")
        .def(py::init<int, int>())
        .def("x", &Point::x)
        .def("y", &Point::y);
}

प्रकार रूपांतरण

pybind11 सामान्य प्रकारों को स्वचालित रूप से बदलता है:

  • std::string ↔ Python str
  • std::vector<T> ↔ Python list
  • std::map ↔ Python dict
  • संख्यात्मक प्रकार ↔ Python int/float

NumPy इंटरऑपरेशन

NumPy ऐरे को py::array_t<T> के रूप में भेजें। बिना कॉपी किए होने वाले ऑपरेशन के लिए बफ़र तक पहुँचें।

void scale(py::array_t<double> arr, double factor) {
    auto buf = arr.mutable_unchecked<1>();
    for (size_t i = 0; i < buf.size(); ++i)
        buf(i) *= factor;
}

बाइंडिंग के रूप में लैम्ब्डा

जब आप तर्कों को बदलना या व्यवहार को रैप करना चाहें, तो लैम्ब्डा को सीधे बाइंड करें।

m.def("show", [](const Point& p) {
    return "(" + std::to_string(p.x()) + ", " + std::to_string(p.y()) + ")";
});

GIL जारी करना

लंबी C++ गणनाओं के लिए GIL जारी करें, ताकि Python के अन्य थ्रेड चल सकें।

m.def("slow", []() {
    py::gil_scoped_release release;
    // expensive C++ work, no Python access
});

प्रदर्शन

pybind11 बहुत कम अतिरिक्त भार जोड़ता है — आमतौर पर प्रति कॉल कुछ सौ नैनोसेकंड। गैर-साधारण फ़ंक्शन के लिए यह नगण्य है, लेकिन कम लागत वाले फ़ंक्शन को बार-बार कॉल करने वाले तंग लूप में इसका महत्व होता है।

विकल्प

अन्य Python-C++ ब्रिज:

  • Boost.Python — पुराना, अधिक भारी
  • SWIG — कई भाषाओं का समर्थन करता है
  • nanobind — नया, pybind11 से तेज़

वास्तविक उपयोग के मामले

pybind11 इनके लिए आदर्श है:

  • Python उपयोगकर्ताओं के लिए C++ लाइब्रेरी को रैप करना
  • C++ कोड से Python के व्यस्त पथों को तेज़ करना
  • C++ ऐप और Python उपकरणों के बीच संख्यात्मक कर्नेल साझा करना

त्वरित जाँच

Python मॉड्यूल घोषित करने के लिए pybind11 किस मैक्रो का उपयोग करता है?

पुनरावलोकन

pybind11 Python के लिए C++ को रैप करना लगभग सहज बना देता है। PYBIND11_MODULE से मॉड्यूल घोषित करें, m.def से फ़ंक्शन और py::class_ से क्लास बाइंड करें। अंतर्निहित रूपांतरण STL प्रकारों को संभालते हैं; NumPy ऐरे बिना कॉपी किए उपयोग किए जा सकते हैं।

शुरुआत निःशुल्क

एआई शिक्षक के साथ C++ सीखें — निःशुल्क

अपने ब्राउज़र में वास्तविक कोड लिखें और चलाएँ, चौबीसों घंटे एआई शिक्षक से तुरंत सहायता पाएँ, और वेब या ऐप पर वहीं से शुरू करें जहाँ आपने छोड़ा था।

पाठ्यक्रम
51
पाठ
203

अक्सर पूछे जाने वाले प्रश्न

क्या “pybind11 के माध्यम से Python को C++ से बुलाना” पाठ निःशुल्क है?

हाँ — C++ Academy अध्ययन पथ के 3 तक कोई भी पाठ, जिसमें “pybind11 के माध्यम से Python को C++ से बुलाना” भी शामिल है, यहाँ वेब पर पूरा पढ़ना निःशुल्क है। इसके बाद CoddyKit PRO हर पाठ अनलॉक करता है, साथ ही अंतर्निर्मित कोड संपादक और चौबीसों घंटे एआई शिक्षक के साथ इंटरैक्टिव अभ्यास भी उपलब्ध कराता है। C++ Academy पाठ्यक्रम में कुल 4 पाठ शामिल हैं।

“pybind11 के माध्यम से Python को C++ से बुलाना” में मैं क्या सीखूँगा?

pybind11 से C++ code को Python module के रूप में wrap करें। आप ब्राउज़र में सीधे चलाए जाने वाले व्यावहारिक कोड के साथ C++ Academy का अभ्यास करते हैं, और पाठ पूरा करते समय 24/7 एआई ट्यूटर आपके प्रश्नों के उत्तर देता है।

क्या C++ Academy शुरू करने के लिए मुझे किसी अनुभव की आवश्यकता है?

पहले के अनुभव की आवश्यकता नहीं है। CoddyKit पर C++ Academy शुरुआती से लेकर उन्नत शिक्षार्थियों तक सभी के लिए व्यवस्थित किया गया है, इसलिए आप यहीं से या शुरुआत से सीखना शुरू कर सकते हैं और अपनी गति से आगे बढ़ सकते हैं। यह 4 में से 2वाँ पाठ है।

“pybind11 के माध्यम से Python को C++ से बुलाना” पाठ पूरा करने में कितना समय लगता है?

CoddyKit का अधिकांश पाठ लगभग 5–10 मिनट में पूरा हो जाता है। हर पाठ छोटा और संवादात्मक है, इसलिए आप लगातार प्रगति करते हैं और वेब या ऐप पर वहीं से सीखना जारी रख सकते हैं जहाँ आपने छोड़ा था।

क्या मैं इस C++ Academy पाठ में कोड लिख और चला सकता हूँ?

हाँ। हर C++ Academy पाठ में एक अंतर्निर्मित कोड संपादक शामिल है, जिससे आप सीधे अपने ब्राउज़र में वास्तविक कोड लिख और चला सकते हैं और तुरंत एआई प्रतिक्रिया पा सकते हैं—स्थानीय सेटअप की आवश्यकता नहीं है।

इस पाठ्यक्रम के सभी पाठ

  1. Extern C और C ABI
  2. pybind11 के माध्यम से Python को C++ से बुलाना
  3. Rust FFI boundaries के लिए C++
  4. बहु-भाषीय bindings के लिए SWIG
← C++ Academy पर वापस जाएँ