pybind11 — Pengoperasian yang mulus antara C++11 dan Python
Contoh setuptools • Contoh pembuatan Scikit • Contoh CMake
pybind11 adalah pustaka ringan khusus header yang mengekspos tipe C++ dengan Python dan sebaliknya, terutama untuk membuat binding Python dari kode C++ yang ada. Sasaran dan sintaksisnya mirip dengan pustaka Boost.Python yang luar biasa karya David Abrahams: untuk meminimalkan kode boilerplate dalam modul ekstensi tradisional dengan menyimpulkan informasi tipe menggunakan introspeksi waktu kompilasi.
Masalah utama dengan Boost.Python—dan alasan pembuatan proyek serupa—adalah Boost. Boost adalah rangkaian pustaka utilitas yang sangat besar dan kompleks yang bekerja dengan hampir semua kompiler C++ yang ada. Kompatibilitas ini ada konsekuensinya: trik dan solusi templat yang rumit diperlukan untuk mendukung spesimen kompiler yang paling tua dan paling bermasalah. Sekarang kompiler yang kompatibel dengan C++11 tersedia secara luas, alat berat ini telah menjadi ketergantungan yang sangat besar dan tidak perlu.
Bayangkan perpustakaan ini sebagai versi kecil Boost.Python yang mandiri dengan segala sesuatu yang tidak relevan untuk pembuatan pengikatan dihilangkan. Tanpa komentar, file header inti hanya memerlukan ~4K baris kode dan bergantung pada Python (3.8+, atau PyPy) dan pustaka standar C++. Implementasi ringkas ini dimungkinkan berkat beberapa fitur bahasa C++11 (khususnya: tupel, fungsi lambda, dan templat variadik). Sejak pembuatannya, perpustakaan ini telah berkembang melampaui Boost.Python dalam banyak hal, sehingga menghasilkan kode pengikatan yang jauh lebih sederhana dalam banyak situasi umum.
Dokumentasi tutorial dan referensi disediakan di pybind11.readthedocs.io. Versi PDF dari manual ini tersedia di sini. Dan kode sumbernya selalu tersedia di github.com/pybind/pybind11.
pybind11 dapat memetakan fitur inti C++ berikut ke Python:
std::shared_ptr
Selain fungsi inti, pybind11 menyediakan beberapa manfaat tambahan:
constexpr
), sehingga menghasilkan biner yang lebih kecil.Proyek ini dibuat oleh Wenzel Jakob. Fitur signifikan dan/atau perbaikan pada kode disumbangkan oleh Jonas Adler, Lori A. Burns, Sylvain Corlay, Eric Cousineau, Aaron Gokaslan, Ralf Grosse-Kunstleve, Trent Houliston, Axel Huebl, @hulucc, Yannick Jadoul, Sergey Lyskov, Johan Mabille, Tomasz Miąsko, Dean Moldovan, Ben Pritchard, Jason Rhinelander, Boris Schäling, Pim Schellart, Henry Schreiner, Ivan Smirnov, Boris Staletic, dan Patrick Stewart.
Kami berterima kasih kepada Google atas kontribusi finansial yang besar terhadap infrastruktur integrasi berkelanjutan yang digunakan oleh proyek ini.
Lihat panduan berkontribusi untuk informasi tentang membangun dan berkontribusi pada pybind11.
pybind11 disediakan di bawah lisensi gaya BSD yang dapat ditemukan di file LICENSE. Dengan menggunakan, mendistribusikan, atau berkontribusi pada proyek ini, Anda menyetujui syarat dan ketentuan lisensi ini.