1======================= 2Extending/Embedding FAQ 3======================= 4 5.. only:: html 6 7 .. contents:: 8 9.. highlight:: c 10 11 12.. XXX need review for Python 3. 13 14 15Can I create my own functions in C? 16----------------------------------- 17 18Yes, you can create built-in modules containing functions, variables, exceptions 19and even new types in C. This is explained in the document 20:ref:`extending-index`. 21 22Most intermediate or advanced Python books will also cover this topic. 23 24 25Can I create my own functions in C++? 26------------------------------------- 27 28Yes, using the C compatibility features found in C++. Place ``extern "C" { 29... }`` around the Python include files and put ``extern "C"`` before each 30function that is going to be called by the Python interpreter. Global or static 31C++ objects with constructors are probably not a good idea. 32 33 34.. _c-wrapper-software: 35 36Writing C is hard; are there any alternatives? 37---------------------------------------------- 38 39There are a number of alternatives to writing your own C extensions, depending 40on what you're trying to do. 41 42.. XXX make sure these all work 43 44`Cython <https://cython.org>`_ and its relative `Pyrex 45<https://www.csse.canterbury.ac.nz/greg.ewing/python/Pyrex/>`_ are compilers 46that accept a slightly modified form of Python and generate the corresponding 47C code. Cython and Pyrex make it possible to write an extension without having 48to learn Python's C API. 49 50If you need to interface to some C or C++ library for which no Python extension 51currently exists, you can try wrapping the library's data types and functions 52with a tool such as `SWIG <https://www.swig.org>`_. `SIP 53<https://riverbankcomputing.com/software/sip/intro>`__, `CXX 54<https://cxx.sourceforge.net/>`_ `Boost 55<https://www.boost.org/libs/python/doc/index.html>`_, or `Weave 56<https://github.com/scipy/weave>`_ are also 57alternatives for wrapping C++ libraries. 58 59 60How can I execute arbitrary Python statements from C? 61----------------------------------------------------- 62 63The highest-level function to do this is :c:func:`PyRun_SimpleString` which takes 64a single string argument to be executed in the context of the module 65``__main__`` and returns ``0`` for success and ``-1`` when an exception occurred 66(including :exc:`SyntaxError`). If you want more control, use 67:c:func:`PyRun_String`; see the source for :c:func:`PyRun_SimpleString` in 68``Python/pythonrun.c``. 69 70 71How can I evaluate an arbitrary Python expression from C? 72--------------------------------------------------------- 73 74Call the function :c:func:`PyRun_String` from the previous question with the 75start symbol :c:data:`Py_eval_input`; it parses an expression, evaluates it and 76returns its value. 77 78 79How do I extract C values from a Python object? 80----------------------------------------------- 81 82That depends on the object's type. If it's a tuple, :c:func:`PyTuple_Size` 83returns its length and :c:func:`PyTuple_GetItem` returns the item at a specified 84index. Lists have similar functions, :c:func:`PyListSize` and 85:c:func:`PyList_GetItem`. 86 87For bytes, :c:func:`PyBytes_Size` returns its length and 88:c:func:`PyBytes_AsStringAndSize` provides a pointer to its value and its 89length. Note that Python bytes objects may contain null bytes so C's 90:c:func:`strlen` should not be used. 91 92To test the type of an object, first make sure it isn't ``NULL``, and then use 93:c:func:`PyBytes_Check`, :c:func:`PyTuple_Check`, :c:func:`PyList_Check`, etc. 94 95There is also a high-level API to Python objects which is provided by the 96so-called 'abstract' interface -- read ``Include/abstract.h`` for further 97details. It allows interfacing with any kind of Python sequence using calls 98like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc. as well 99as many other useful protocols such as numbers (:c:func:`PyNumber_Index` et 100al.) and mappings in the PyMapping APIs. 101 102 103How do I use Py_BuildValue() to create a tuple of arbitrary length? 104------------------------------------------------------------------- 105 106You can't. Use :c:func:`PyTuple_Pack` instead. 107 108 109How do I call an object's method from C? 110---------------------------------------- 111 112The :c:func:`PyObject_CallMethod` function can be used to call an arbitrary 113method of an object. The parameters are the object, the name of the method to 114call, a format string like that used with :c:func:`Py_BuildValue`, and the 115argument values:: 116 117 PyObject * 118 PyObject_CallMethod(PyObject *object, const char *method_name, 119 const char *arg_format, ...); 120 121This works for any object that has methods -- whether built-in or user-defined. 122You are responsible for eventually :c:func:`Py_DECREF`\ 'ing the return value. 123 124To call, e.g., a file object's "seek" method with arguments 10, 0 (assuming the 125file object pointer is "f"):: 126 127 res = PyObject_CallMethod(f, "seek", "(ii)", 10, 0); 128 if (res == NULL) { 129 ... an exception occurred ... 130 } 131 else { 132 Py_DECREF(res); 133 } 134 135Note that since :c:func:`PyObject_CallObject` *always* wants a tuple for the 136argument list, to call a function without arguments, pass "()" for the format, 137and to call a function with one argument, surround the argument in parentheses, 138e.g. "(i)". 139 140 141How do I catch the output from PyErr_Print() (or anything that prints to stdout/stderr)? 142---------------------------------------------------------------------------------------- 143 144In Python code, define an object that supports the ``write()`` method. Assign 145this object to :data:`sys.stdout` and :data:`sys.stderr`. Call print_error, or 146just allow the standard traceback mechanism to work. Then, the output will go 147wherever your ``write()`` method sends it. 148 149The easiest way to do this is to use the :class:`io.StringIO` class: 150 151.. code-block:: pycon 152 153 >>> import io, sys 154 >>> sys.stdout = io.StringIO() 155 >>> print('foo') 156 >>> print('hello world!') 157 >>> sys.stderr.write(sys.stdout.getvalue()) 158 foo 159 hello world! 160 161A custom object to do the same would look like this: 162 163.. code-block:: pycon 164 165 >>> import io, sys 166 >>> class StdoutCatcher(io.TextIOBase): 167 ... def __init__(self): 168 ... self.data = [] 169 ... def write(self, stuff): 170 ... self.data.append(stuff) 171 ... 172 >>> import sys 173 >>> sys.stdout = StdoutCatcher() 174 >>> print('foo') 175 >>> print('hello world!') 176 >>> sys.stderr.write(''.join(sys.stdout.data)) 177 foo 178 hello world! 179 180 181How do I access a module written in Python from C? 182-------------------------------------------------- 183 184You can get a pointer to the module object as follows:: 185 186 module = PyImport_ImportModule("<modulename>"); 187 188If the module hasn't been imported yet (i.e. it is not yet present in 189:data:`sys.modules`), this initializes the module; otherwise it simply returns 190the value of ``sys.modules["<modulename>"]``. Note that it doesn't enter the 191module into any namespace -- it only ensures it has been initialized and is 192stored in :data:`sys.modules`. 193 194You can then access the module's attributes (i.e. any name defined in the 195module) as follows:: 196 197 attr = PyObject_GetAttrString(module, "<attrname>"); 198 199Calling :c:func:`PyObject_SetAttrString` to assign to variables in the module 200also works. 201 202 203How do I interface to C++ objects from Python? 204---------------------------------------------- 205 206Depending on your requirements, there are many approaches. To do this manually, 207begin by reading :ref:`the "Extending and Embedding" document 208<extending-index>`. Realize that for the Python run-time system, there isn't a 209whole lot of difference between C and C++ -- so the strategy of building a new 210Python type around a C structure (pointer) type will also work for C++ objects. 211 212For C++ libraries, see :ref:`c-wrapper-software`. 213 214 215I added a module using the Setup file and the make fails; why? 216-------------------------------------------------------------- 217 218Setup must end in a newline, if there is no newline there, the build process 219fails. (Fixing this requires some ugly shell script hackery, and this bug is so 220minor that it doesn't seem worth the effort.) 221 222 223How do I debug an extension? 224---------------------------- 225 226When using GDB with dynamically loaded extensions, you can't set a breakpoint in 227your extension until your extension is loaded. 228 229In your ``.gdbinit`` file (or interactively), add the command: 230 231.. code-block:: none 232 233 br _PyImport_LoadDynamicModule 234 235Then, when you run GDB: 236 237.. code-block:: shell-session 238 239 $ gdb /local/bin/python 240 gdb) run myscript.py 241 gdb) continue # repeat until your extension is loaded 242 gdb) finish # so that your extension is loaded 243 gdb) br myfunction.c:50 244 gdb) continue 245 246I want to compile a Python module on my Linux system, but some files are missing. Why? 247-------------------------------------------------------------------------------------- 248 249Most packaged versions of Python don't include the 250:file:`/usr/lib/python2.{x}/config/` directory, which contains various files 251required for compiling Python extensions. 252 253For Red Hat, install the python-devel RPM to get the necessary files. 254 255For Debian, run ``apt-get install python-dev``. 256 257How do I tell "incomplete input" from "invalid input"? 258------------------------------------------------------ 259 260Sometimes you want to emulate the Python interactive interpreter's behavior, 261where it gives you a continuation prompt when the input is incomplete (e.g. you 262typed the start of an "if" statement or you didn't close your parentheses or 263triple string quotes), but it gives you a syntax error message immediately when 264the input is invalid. 265 266In Python you can use the :mod:`codeop` module, which approximates the parser's 267behavior sufficiently. IDLE uses this, for example. 268 269The easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` (perhaps 270in a separate thread) and let the Python interpreter handle the input for 271you. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` to point at your 272custom input function. See ``Modules/readline.c`` and ``Parser/myreadline.c`` 273for more hints. 274 275How do I find undefined g++ symbols __builtin_new or __pure_virtual? 276-------------------------------------------------------------------- 277 278To dynamically load g++ extension modules, you must recompile Python, relink it 279using g++ (change LINKCC in the Python Modules Makefile), and link your 280extension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``). 281 282 283Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)? 284---------------------------------------------------------------------------------------------------------------- 285 286Yes, you can inherit from built-in classes such as :class:`int`, :class:`list`, 287:class:`dict`, etc. 288 289The Boost Python Library (BPL, https://www.boost.org/libs/python/doc/index.html) 290provides a way of doing this from C++ (i.e. you can inherit from an extension 291class written in C++ using the BPL). 292