17db96d56Sopenharmony_ci=======================
27db96d56Sopenharmony_ciExtending/Embedding FAQ
37db96d56Sopenharmony_ci=======================
47db96d56Sopenharmony_ci
57db96d56Sopenharmony_ci.. only:: html
67db96d56Sopenharmony_ci
77db96d56Sopenharmony_ci   .. contents::
87db96d56Sopenharmony_ci
97db96d56Sopenharmony_ci.. highlight:: c
107db96d56Sopenharmony_ci
117db96d56Sopenharmony_ci
127db96d56Sopenharmony_ci.. XXX need review for Python 3.
137db96d56Sopenharmony_ci
147db96d56Sopenharmony_ci
157db96d56Sopenharmony_ciCan I create my own functions in C?
167db96d56Sopenharmony_ci-----------------------------------
177db96d56Sopenharmony_ci
187db96d56Sopenharmony_ciYes, you can create built-in modules containing functions, variables, exceptions
197db96d56Sopenharmony_ciand even new types in C.  This is explained in the document
207db96d56Sopenharmony_ci:ref:`extending-index`.
217db96d56Sopenharmony_ci
227db96d56Sopenharmony_ciMost intermediate or advanced Python books will also cover this topic.
237db96d56Sopenharmony_ci
247db96d56Sopenharmony_ci
257db96d56Sopenharmony_ciCan I create my own functions in C++?
267db96d56Sopenharmony_ci-------------------------------------
277db96d56Sopenharmony_ci
287db96d56Sopenharmony_ciYes, using the C compatibility features found in C++.  Place ``extern "C" {
297db96d56Sopenharmony_ci... }`` around the Python include files and put ``extern "C"`` before each
307db96d56Sopenharmony_cifunction that is going to be called by the Python interpreter.  Global or static
317db96d56Sopenharmony_ciC++ objects with constructors are probably not a good idea.
327db96d56Sopenharmony_ci
337db96d56Sopenharmony_ci
347db96d56Sopenharmony_ci.. _c-wrapper-software:
357db96d56Sopenharmony_ci
367db96d56Sopenharmony_ciWriting C is hard; are there any alternatives?
377db96d56Sopenharmony_ci----------------------------------------------
387db96d56Sopenharmony_ci
397db96d56Sopenharmony_ciThere are a number of alternatives to writing your own C extensions, depending
407db96d56Sopenharmony_cion what you're trying to do.
417db96d56Sopenharmony_ci
427db96d56Sopenharmony_ci.. XXX make sure these all work
437db96d56Sopenharmony_ci
447db96d56Sopenharmony_ci`Cython <https://cython.org>`_ and its relative `Pyrex
457db96d56Sopenharmony_ci<https://www.csse.canterbury.ac.nz/greg.ewing/python/Pyrex/>`_ are compilers
467db96d56Sopenharmony_cithat accept a slightly modified form of Python and generate the corresponding
477db96d56Sopenharmony_ciC code.  Cython and Pyrex make it possible to write an extension without having
487db96d56Sopenharmony_cito learn Python's C API.
497db96d56Sopenharmony_ci
507db96d56Sopenharmony_ciIf you need to interface to some C or C++ library for which no Python extension
517db96d56Sopenharmony_cicurrently exists, you can try wrapping the library's data types and functions
527db96d56Sopenharmony_ciwith a tool such as `SWIG <https://www.swig.org>`_.  `SIP
537db96d56Sopenharmony_ci<https://riverbankcomputing.com/software/sip/intro>`__, `CXX
547db96d56Sopenharmony_ci<https://cxx.sourceforge.net/>`_ `Boost
557db96d56Sopenharmony_ci<https://www.boost.org/libs/python/doc/index.html>`_, or `Weave
567db96d56Sopenharmony_ci<https://github.com/scipy/weave>`_ are also
577db96d56Sopenharmony_cialternatives for wrapping C++ libraries.
587db96d56Sopenharmony_ci
597db96d56Sopenharmony_ci
607db96d56Sopenharmony_ciHow can I execute arbitrary Python statements from C?
617db96d56Sopenharmony_ci-----------------------------------------------------
627db96d56Sopenharmony_ci
637db96d56Sopenharmony_ciThe highest-level function to do this is :c:func:`PyRun_SimpleString` which takes
647db96d56Sopenharmony_cia single string argument to be executed in the context of the module
657db96d56Sopenharmony_ci``__main__`` and returns ``0`` for success and ``-1`` when an exception occurred
667db96d56Sopenharmony_ci(including :exc:`SyntaxError`).  If you want more control, use
677db96d56Sopenharmony_ci:c:func:`PyRun_String`; see the source for :c:func:`PyRun_SimpleString` in
687db96d56Sopenharmony_ci``Python/pythonrun.c``.
697db96d56Sopenharmony_ci
707db96d56Sopenharmony_ci
717db96d56Sopenharmony_ciHow can I evaluate an arbitrary Python expression from C?
727db96d56Sopenharmony_ci---------------------------------------------------------
737db96d56Sopenharmony_ci
747db96d56Sopenharmony_ciCall the function :c:func:`PyRun_String` from the previous question with the
757db96d56Sopenharmony_cistart symbol :c:data:`Py_eval_input`; it parses an expression, evaluates it and
767db96d56Sopenharmony_cireturns its value.
777db96d56Sopenharmony_ci
787db96d56Sopenharmony_ci
797db96d56Sopenharmony_ciHow do I extract C values from a Python object?
807db96d56Sopenharmony_ci-----------------------------------------------
817db96d56Sopenharmony_ci
827db96d56Sopenharmony_ciThat depends on the object's type.  If it's a tuple, :c:func:`PyTuple_Size`
837db96d56Sopenharmony_cireturns its length and :c:func:`PyTuple_GetItem` returns the item at a specified
847db96d56Sopenharmony_ciindex.  Lists have similar functions, :c:func:`PyListSize` and
857db96d56Sopenharmony_ci:c:func:`PyList_GetItem`.
867db96d56Sopenharmony_ci
877db96d56Sopenharmony_ciFor bytes, :c:func:`PyBytes_Size` returns its length and
887db96d56Sopenharmony_ci:c:func:`PyBytes_AsStringAndSize` provides a pointer to its value and its
897db96d56Sopenharmony_cilength.  Note that Python bytes objects may contain null bytes so C's
907db96d56Sopenharmony_ci:c:func:`strlen` should not be used.
917db96d56Sopenharmony_ci
927db96d56Sopenharmony_ciTo test the type of an object, first make sure it isn't ``NULL``, and then use
937db96d56Sopenharmony_ci:c:func:`PyBytes_Check`, :c:func:`PyTuple_Check`, :c:func:`PyList_Check`, etc.
947db96d56Sopenharmony_ci
957db96d56Sopenharmony_ciThere is also a high-level API to Python objects which is provided by the
967db96d56Sopenharmony_ciso-called 'abstract' interface -- read ``Include/abstract.h`` for further
977db96d56Sopenharmony_cidetails.  It allows interfacing with any kind of Python sequence using calls
987db96d56Sopenharmony_cilike :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc. as well
997db96d56Sopenharmony_cias many other useful protocols such as numbers (:c:func:`PyNumber_Index` et
1007db96d56Sopenharmony_cial.) and mappings in the PyMapping APIs.
1017db96d56Sopenharmony_ci
1027db96d56Sopenharmony_ci
1037db96d56Sopenharmony_ciHow do I use Py_BuildValue() to create a tuple of arbitrary length?
1047db96d56Sopenharmony_ci-------------------------------------------------------------------
1057db96d56Sopenharmony_ci
1067db96d56Sopenharmony_ciYou can't.  Use :c:func:`PyTuple_Pack` instead.
1077db96d56Sopenharmony_ci
1087db96d56Sopenharmony_ci
1097db96d56Sopenharmony_ciHow do I call an object's method from C?
1107db96d56Sopenharmony_ci----------------------------------------
1117db96d56Sopenharmony_ci
1127db96d56Sopenharmony_ciThe :c:func:`PyObject_CallMethod` function can be used to call an arbitrary
1137db96d56Sopenharmony_cimethod of an object.  The parameters are the object, the name of the method to
1147db96d56Sopenharmony_cicall, a format string like that used with :c:func:`Py_BuildValue`, and the
1157db96d56Sopenharmony_ciargument values::
1167db96d56Sopenharmony_ci
1177db96d56Sopenharmony_ci   PyObject *
1187db96d56Sopenharmony_ci   PyObject_CallMethod(PyObject *object, const char *method_name,
1197db96d56Sopenharmony_ci                       const char *arg_format, ...);
1207db96d56Sopenharmony_ci
1217db96d56Sopenharmony_ciThis works for any object that has methods -- whether built-in or user-defined.
1227db96d56Sopenharmony_ciYou are responsible for eventually :c:func:`Py_DECREF`\ 'ing the return value.
1237db96d56Sopenharmony_ci
1247db96d56Sopenharmony_ciTo call, e.g., a file object's "seek" method with arguments 10, 0 (assuming the
1257db96d56Sopenharmony_cifile object pointer is "f")::
1267db96d56Sopenharmony_ci
1277db96d56Sopenharmony_ci   res = PyObject_CallMethod(f, "seek", "(ii)", 10, 0);
1287db96d56Sopenharmony_ci   if (res == NULL) {
1297db96d56Sopenharmony_ci           ... an exception occurred ...
1307db96d56Sopenharmony_ci   }
1317db96d56Sopenharmony_ci   else {
1327db96d56Sopenharmony_ci           Py_DECREF(res);
1337db96d56Sopenharmony_ci   }
1347db96d56Sopenharmony_ci
1357db96d56Sopenharmony_ciNote that since :c:func:`PyObject_CallObject` *always* wants a tuple for the
1367db96d56Sopenharmony_ciargument list, to call a function without arguments, pass "()" for the format,
1377db96d56Sopenharmony_ciand to call a function with one argument, surround the argument in parentheses,
1387db96d56Sopenharmony_cie.g. "(i)".
1397db96d56Sopenharmony_ci
1407db96d56Sopenharmony_ci
1417db96d56Sopenharmony_ciHow do I catch the output from PyErr_Print() (or anything that prints to stdout/stderr)?
1427db96d56Sopenharmony_ci----------------------------------------------------------------------------------------
1437db96d56Sopenharmony_ci
1447db96d56Sopenharmony_ciIn Python code, define an object that supports the ``write()`` method.  Assign
1457db96d56Sopenharmony_cithis object to :data:`sys.stdout` and :data:`sys.stderr`.  Call print_error, or
1467db96d56Sopenharmony_cijust allow the standard traceback mechanism to work. Then, the output will go
1477db96d56Sopenharmony_ciwherever your ``write()`` method sends it.
1487db96d56Sopenharmony_ci
1497db96d56Sopenharmony_ciThe easiest way to do this is to use the :class:`io.StringIO` class:
1507db96d56Sopenharmony_ci
1517db96d56Sopenharmony_ci.. code-block:: pycon
1527db96d56Sopenharmony_ci
1537db96d56Sopenharmony_ci   >>> import io, sys
1547db96d56Sopenharmony_ci   >>> sys.stdout = io.StringIO()
1557db96d56Sopenharmony_ci   >>> print('foo')
1567db96d56Sopenharmony_ci   >>> print('hello world!')
1577db96d56Sopenharmony_ci   >>> sys.stderr.write(sys.stdout.getvalue())
1587db96d56Sopenharmony_ci   foo
1597db96d56Sopenharmony_ci   hello world!
1607db96d56Sopenharmony_ci
1617db96d56Sopenharmony_ciA custom object to do the same would look like this:
1627db96d56Sopenharmony_ci
1637db96d56Sopenharmony_ci.. code-block:: pycon
1647db96d56Sopenharmony_ci
1657db96d56Sopenharmony_ci   >>> import io, sys
1667db96d56Sopenharmony_ci   >>> class StdoutCatcher(io.TextIOBase):
1677db96d56Sopenharmony_ci   ...     def __init__(self):
1687db96d56Sopenharmony_ci   ...         self.data = []
1697db96d56Sopenharmony_ci   ...     def write(self, stuff):
1707db96d56Sopenharmony_ci   ...         self.data.append(stuff)
1717db96d56Sopenharmony_ci   ...
1727db96d56Sopenharmony_ci   >>> import sys
1737db96d56Sopenharmony_ci   >>> sys.stdout = StdoutCatcher()
1747db96d56Sopenharmony_ci   >>> print('foo')
1757db96d56Sopenharmony_ci   >>> print('hello world!')
1767db96d56Sopenharmony_ci   >>> sys.stderr.write(''.join(sys.stdout.data))
1777db96d56Sopenharmony_ci   foo
1787db96d56Sopenharmony_ci   hello world!
1797db96d56Sopenharmony_ci
1807db96d56Sopenharmony_ci
1817db96d56Sopenharmony_ciHow do I access a module written in Python from C?
1827db96d56Sopenharmony_ci--------------------------------------------------
1837db96d56Sopenharmony_ci
1847db96d56Sopenharmony_ciYou can get a pointer to the module object as follows::
1857db96d56Sopenharmony_ci
1867db96d56Sopenharmony_ci   module = PyImport_ImportModule("<modulename>");
1877db96d56Sopenharmony_ci
1887db96d56Sopenharmony_ciIf the module hasn't been imported yet (i.e. it is not yet present in
1897db96d56Sopenharmony_ci:data:`sys.modules`), this initializes the module; otherwise it simply returns
1907db96d56Sopenharmony_cithe value of ``sys.modules["<modulename>"]``.  Note that it doesn't enter the
1917db96d56Sopenharmony_cimodule into any namespace -- it only ensures it has been initialized and is
1927db96d56Sopenharmony_cistored in :data:`sys.modules`.
1937db96d56Sopenharmony_ci
1947db96d56Sopenharmony_ciYou can then access the module's attributes (i.e. any name defined in the
1957db96d56Sopenharmony_cimodule) as follows::
1967db96d56Sopenharmony_ci
1977db96d56Sopenharmony_ci   attr = PyObject_GetAttrString(module, "<attrname>");
1987db96d56Sopenharmony_ci
1997db96d56Sopenharmony_ciCalling :c:func:`PyObject_SetAttrString` to assign to variables in the module
2007db96d56Sopenharmony_cialso works.
2017db96d56Sopenharmony_ci
2027db96d56Sopenharmony_ci
2037db96d56Sopenharmony_ciHow do I interface to C++ objects from Python?
2047db96d56Sopenharmony_ci----------------------------------------------
2057db96d56Sopenharmony_ci
2067db96d56Sopenharmony_ciDepending on your requirements, there are many approaches.  To do this manually,
2077db96d56Sopenharmony_cibegin by reading :ref:`the "Extending and Embedding" document
2087db96d56Sopenharmony_ci<extending-index>`.  Realize that for the Python run-time system, there isn't a
2097db96d56Sopenharmony_ciwhole lot of difference between C and C++ -- so the strategy of building a new
2107db96d56Sopenharmony_ciPython type around a C structure (pointer) type will also work for C++ objects.
2117db96d56Sopenharmony_ci
2127db96d56Sopenharmony_ciFor C++ libraries, see :ref:`c-wrapper-software`.
2137db96d56Sopenharmony_ci
2147db96d56Sopenharmony_ci
2157db96d56Sopenharmony_ciI added a module using the Setup file and the make fails; why?
2167db96d56Sopenharmony_ci--------------------------------------------------------------
2177db96d56Sopenharmony_ci
2187db96d56Sopenharmony_ciSetup must end in a newline, if there is no newline there, the build process
2197db96d56Sopenharmony_cifails.  (Fixing this requires some ugly shell script hackery, and this bug is so
2207db96d56Sopenharmony_ciminor that it doesn't seem worth the effort.)
2217db96d56Sopenharmony_ci
2227db96d56Sopenharmony_ci
2237db96d56Sopenharmony_ciHow do I debug an extension?
2247db96d56Sopenharmony_ci----------------------------
2257db96d56Sopenharmony_ci
2267db96d56Sopenharmony_ciWhen using GDB with dynamically loaded extensions, you can't set a breakpoint in
2277db96d56Sopenharmony_ciyour extension until your extension is loaded.
2287db96d56Sopenharmony_ci
2297db96d56Sopenharmony_ciIn your ``.gdbinit`` file (or interactively), add the command:
2307db96d56Sopenharmony_ci
2317db96d56Sopenharmony_ci.. code-block:: none
2327db96d56Sopenharmony_ci
2337db96d56Sopenharmony_ci   br _PyImport_LoadDynamicModule
2347db96d56Sopenharmony_ci
2357db96d56Sopenharmony_ciThen, when you run GDB:
2367db96d56Sopenharmony_ci
2377db96d56Sopenharmony_ci.. code-block:: shell-session
2387db96d56Sopenharmony_ci
2397db96d56Sopenharmony_ci   $ gdb /local/bin/python
2407db96d56Sopenharmony_ci   gdb) run myscript.py
2417db96d56Sopenharmony_ci   gdb) continue # repeat until your extension is loaded
2427db96d56Sopenharmony_ci   gdb) finish   # so that your extension is loaded
2437db96d56Sopenharmony_ci   gdb) br myfunction.c:50
2447db96d56Sopenharmony_ci   gdb) continue
2457db96d56Sopenharmony_ci
2467db96d56Sopenharmony_ciI want to compile a Python module on my Linux system, but some files are missing. Why?
2477db96d56Sopenharmony_ci--------------------------------------------------------------------------------------
2487db96d56Sopenharmony_ci
2497db96d56Sopenharmony_ciMost packaged versions of Python don't include the
2507db96d56Sopenharmony_ci:file:`/usr/lib/python2.{x}/config/` directory, which contains various files
2517db96d56Sopenharmony_cirequired for compiling Python extensions.
2527db96d56Sopenharmony_ci
2537db96d56Sopenharmony_ciFor Red Hat, install the python-devel RPM to get the necessary files.
2547db96d56Sopenharmony_ci
2557db96d56Sopenharmony_ciFor Debian, run ``apt-get install python-dev``.
2567db96d56Sopenharmony_ci
2577db96d56Sopenharmony_ciHow do I tell "incomplete input" from "invalid input"?
2587db96d56Sopenharmony_ci------------------------------------------------------
2597db96d56Sopenharmony_ci
2607db96d56Sopenharmony_ciSometimes you want to emulate the Python interactive interpreter's behavior,
2617db96d56Sopenharmony_ciwhere it gives you a continuation prompt when the input is incomplete (e.g. you
2627db96d56Sopenharmony_cityped the start of an "if" statement or you didn't close your parentheses or
2637db96d56Sopenharmony_citriple string quotes), but it gives you a syntax error message immediately when
2647db96d56Sopenharmony_cithe input is invalid.
2657db96d56Sopenharmony_ci
2667db96d56Sopenharmony_ciIn Python you can use the :mod:`codeop` module, which approximates the parser's
2677db96d56Sopenharmony_cibehavior sufficiently.  IDLE uses this, for example.
2687db96d56Sopenharmony_ci
2697db96d56Sopenharmony_ciThe easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` (perhaps
2707db96d56Sopenharmony_ciin a separate thread) and let the Python interpreter handle the input for
2717db96d56Sopenharmony_ciyou. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` to point at your
2727db96d56Sopenharmony_cicustom input function. See ``Modules/readline.c`` and ``Parser/myreadline.c``
2737db96d56Sopenharmony_cifor more hints.
2747db96d56Sopenharmony_ci
2757db96d56Sopenharmony_ciHow do I find undefined g++ symbols __builtin_new or __pure_virtual?
2767db96d56Sopenharmony_ci--------------------------------------------------------------------
2777db96d56Sopenharmony_ci
2787db96d56Sopenharmony_ciTo dynamically load g++ extension modules, you must recompile Python, relink it
2797db96d56Sopenharmony_ciusing g++ (change LINKCC in the Python Modules Makefile), and link your
2807db96d56Sopenharmony_ciextension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``).
2817db96d56Sopenharmony_ci
2827db96d56Sopenharmony_ci
2837db96d56Sopenharmony_ciCan I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)?
2847db96d56Sopenharmony_ci----------------------------------------------------------------------------------------------------------------
2857db96d56Sopenharmony_ci
2867db96d56Sopenharmony_ciYes, you can inherit from built-in classes such as :class:`int`, :class:`list`,
2877db96d56Sopenharmony_ci:class:`dict`, etc.
2887db96d56Sopenharmony_ci
2897db96d56Sopenharmony_ciThe Boost Python Library (BPL, https://www.boost.org/libs/python/doc/index.html)
2907db96d56Sopenharmony_ciprovides a way of doing this from C++ (i.e. you can inherit from an extension
2917db96d56Sopenharmony_ciclass written in C++ using the BPL).
292