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