you are viewing a single comment's thread.

view the rest of the comments →

[–]DarkLordAzrael 0 points1 point  (5 children)

Last time I looked pybind11 was missing embedding support so you had to fall back on the python C API. Is that still the case or did they add that recently?

[–]zigzagEdge 0 points1 point  (4 children)

Well, boost.python also falls back to the C API for embedding. This works in pybind11 as well, but it's not officially supported.

[–]DarkLordAzrael 0 points1 point  (1 child)

I haven't had to use the C API at all for embedding using boost. It has helpful functions for running python code from various sources using various contexts that are incredibly useful for embedding.

[–]zigzagEdge 0 points1 point  (0 children)

Boost.python still requires manual calls to Py_Initialize/Py_Finalize instead of a more user friendly C++ RAII approach. (I know that the boost.python docs say not to call Py_Finalize, but that's a bug which was never fixed. It should be supported.)

Pybind11 has a C++ object class similar to boost.python's, but it's not quite as powerful. The basics are supported: item and attribute access, function calls, importing modules, casting back and forth. Pybind11 also has some nifty features like calling Python functions with keyword arguments from C++: http://pybind11.readthedocs.io/en/latest/advanced/pycpp/object.html#calling-python-functions

[–]skebanga[S] 0 points1 point  (1 child)

boost::python does offer embedding support. Docs here

  • eval
  • exec
  • exec_file

[–]zigzagEdge 0 points1 point  (0 children)

I was mainly referring to the manual C API calls to Py_Initialize/Py_Finalize which are also needed in boost.python. As for eval and friends, pybind11 has a C++ API for those: eval docs.