pybind11 — การทำงานที่ราบรื่นระหว่าง C++11 และ Python
ตัวอย่างเครื่องมือติดตั้ง • ตัวอย่าง Scikit-build • ตัวอย่าง CMake
pybind11 เป็นไลบรารี่แบบส่วนหัวเท่านั้นที่มีน้ำหนักเบา ซึ่งเปิดเผยประเภท C++ ใน Python และในทางกลับกัน โดยส่วนใหญ่ใช้เพื่อสร้างการเชื่อมโยง Python ของโค้ด C++ ที่มีอยู่ เป้าหมายและไวยากรณ์ของมันคล้ายกับไลบรารี Boost.Python ที่ยอดเยี่ยมโดย David Abrahams: เพื่อลดขนาดโค้ดสำเร็จรูปในโมดูลส่วนขยายแบบดั้งเดิมโดยการอนุมานข้อมูลประเภทโดยใช้วิปัสสนาเวลาคอมไพล์
ปัญหาหลักของ Boost.Python และเหตุผลในการสร้างโปรเจ็กต์ที่คล้ายกันคือ Boost Boost เป็นชุดยูทิลิตี้ไลบรารีขนาดใหญ่และซับซ้อนขนาดใหญ่ที่ทำงานร่วมกับคอมไพเลอร์ C++ เกือบทุกตัวที่มีอยู่ ความเข้ากันได้นี้มีค่าใช้จ่าย: เทคนิคเทมเพลต arcane และวิธีแก้ปัญหามีความจำเป็นเพื่อรองรับตัวอย่างคอมไพเลอร์ที่เก่าที่สุดและบั๊กที่สุด ขณะนี้คอมไพเลอร์ที่เข้ากันได้กับ C++11 มีวางจำหน่ายอย่างแพร่หลาย เครื่องจักรหนักนี้กลายเป็นการพึ่งพาที่มากเกินไปและไม่จำเป็น
คิดว่าไลบรารี่นี้เป็น Boost.Python เวอร์ชันเล็ก ๆ ที่มีในตัวเอง โดยที่ทุกอย่างถูกแยกออกไปซึ่งไม่เกี่ยวข้องกับการสร้างการเชื่อมโยง หากไม่มีความคิดเห็น ไฟล์ส่วนหัวหลักต้องการเพียงโค้ด ~4K บรรทัด และขึ้นอยู่กับ Python (3.8+ หรือ PyPy) และไลบรารีมาตรฐาน C++ การใช้งานแบบกะทัดรัดนี้เกิดขึ้นได้ด้วยฟีเจอร์ภาษา C++11 บางอย่าง (โดยเฉพาะ: tuples, ฟังก์ชัน lambda และเทมเพลต variadic) นับตั้งแต่ก่อตั้งขึ้น ไลบรารีนี้ได้เติบโตขึ้นเหนือกว่า Boost.Python ในหลาย ๆ ด้าน ซึ่งนำไปสู่การผูกโค้ดที่ง่ายขึ้นอย่างมากในสถานการณ์ทั่วไปหลายประการ
เอกสารการสอนและการอ้างอิงมีให้ที่ pybind11.readthedocs.io คู่มือเวอร์ชัน PDF มีอยู่ที่นี่ และซอร์สโค้ดจะพร้อมใช้งานเสมอที่ github.com/pybind/pybind11
pybind11 สามารถแมปคุณสมบัติหลัก C++ ต่อไปนี้กับ Python:
std::shared_ptr
นอกเหนือจากฟังก์ชันการทำงานหลักแล้ว pybind11 ยังมีคุณสมบัติพิเศษบางอย่างอีกด้วย:
constexpr
) ส่งผลให้ไบนารีมีขนาดเล็กลงโปรเจ็กต์นี้สร้างโดย Wenzel Jakob คุณสมบัติที่สำคัญและ/หรือการปรับปรุงโค้ดได้รับการสนับสนุนโดย Jonas Adler, Lori A. Burns, Sylvain Corlay, Eric Cousineau, Aaron Gokaslan, Ralf Grosse-Kunstleve, Trent Houliston, Axel Huebl, @hulucc, Yannick Jadoul, Sergey Lyskov, Johan มาบิลเล, โทมัสซ์ มิออนสโก, ดีน มอลโดแวน, เบน พริตชาร์ด, เจสัน ไรน์แลนเดอร์, บอริส ชาลิง, พิม เชลลาร์ต, เฮนรี ชไรเนอร์, อีวาน สเมียร์นอฟ, บอริส สตาเลติก และแพทริค สจ๊วร์ต
เราขอขอบคุณ Google ที่ให้การสนับสนุนทางการเงินแก่โครงสร้างพื้นฐานการบูรณาการอย่างต่อเนื่องที่ใช้โดยโครงการนี้
ดูคู่มือการสนับสนุนสำหรับข้อมูลเกี่ยวกับการสร้างและการมีส่วนร่วมใน pybind11
pybind11 มีให้ภายใต้ลิขสิทธิ์แบบ BSD ที่สามารถพบได้ในไฟล์ LICENSE โดยการใช้ แจกจ่าย หรือมีส่วนร่วมในโครงการนี้ แสดงว่าคุณยอมรับข้อกำหนดและเงื่อนไขของใบอนุญาตนี้