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 <http://cython.org>`_ and its relative `Pyrex 45<https://www.cosc.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 <http://www.swig.org>`_. `SIP 53<https://riverbankcomputing.com/software/sip/intro>`__, `CXX 54<http://cxx.sourceforge.net/>`_ `Boost 55<http://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 257 258How do I tell "incomplete input" from "invalid input"? 259------------------------------------------------------ 260 261Sometimes you want to emulate the Python interactive interpreter's behavior, 262where it gives you a continuation prompt when the input is incomplete (e.g. you 263typed the start of an "if" statement or you didn't close your parentheses or 264triple string quotes), but it gives you a syntax error message immediately when 265the input is invalid. 266 267In Python you can use the :mod:`codeop` module, which approximates the parser's 268behavior sufficiently. IDLE uses this, for example. 269 270The easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` (perhaps 271in a separate thread) and let the Python interpreter handle the input for 272you. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` to point at your 273custom input function. See ``Modules/readline.c`` and ``Parser/myreadline.c`` 274for more hints. 275 276However sometimes you have to run the embedded Python interpreter in the same 277thread as your rest application and you can't allow the 278:c:func:`PyRun_InteractiveLoop` to stop while waiting for user input. 279A solution is trying to compile the received string with 280:c:func:`Py_CompileString`. If it compiles without errors, try to execute the 281returned code object by calling :c:func:`PyEval_EvalCode`. Otherwise save the 282input for later. If the compilation fails, find out if it's an error or just 283more input is required - by extracting the message string from the exception 284tuple and comparing it to the string "unexpected EOF while parsing". Here is a 285complete example using the GNU readline library (you may want to ignore 286**SIGINT** while calling readline()):: 287 288 #include <stdio.h> 289 #include <readline.h> 290 291 #define PY_SSIZE_T_CLEAN 292 #include <Python.h> 293 #include <object.h> 294 #include <compile.h> 295 #include <eval.h> 296 297 int main (int argc, char* argv[]) 298 { 299 int i, j, done = 0; /* lengths of line, code */ 300 char ps1[] = ">>> "; 301 char ps2[] = "... "; 302 char *prompt = ps1; 303 char *msg, *line, *code = NULL; 304 PyObject *src, *glb, *loc; 305 PyObject *exc, *val, *trb, *obj, *dum; 306 307 Py_Initialize (); 308 loc = PyDict_New (); 309 glb = PyDict_New (); 310 PyDict_SetItemString (glb, "__builtins__", PyEval_GetBuiltins ()); 311 312 while (!done) 313 { 314 line = readline (prompt); 315 316 if (NULL == line) /* Ctrl-D pressed */ 317 { 318 done = 1; 319 } 320 else 321 { 322 i = strlen (line); 323 324 if (i > 0) 325 add_history (line); /* save non-empty lines */ 326 327 if (NULL == code) /* nothing in code yet */ 328 j = 0; 329 else 330 j = strlen (code); 331 332 code = realloc (code, i + j + 2); 333 if (NULL == code) /* out of memory */ 334 exit (1); 335 336 if (0 == j) /* code was empty, so */ 337 code[0] = '\0'; /* keep strncat happy */ 338 339 strncat (code, line, i); /* append line to code */ 340 code[i + j] = '\n'; /* append '\n' to code */ 341 code[i + j + 1] = '\0'; 342 343 src = Py_CompileString (code, "<stdin>", Py_single_input); 344 345 if (NULL != src) /* compiled just fine - */ 346 { 347 if (ps1 == prompt || /* ">>> " or */ 348 '\n' == code[i + j - 1]) /* "... " and double '\n' */ 349 { /* so execute it */ 350 dum = PyEval_EvalCode (src, glb, loc); 351 Py_XDECREF (dum); 352 Py_XDECREF (src); 353 free (code); 354 code = NULL; 355 if (PyErr_Occurred ()) 356 PyErr_Print (); 357 prompt = ps1; 358 } 359 } /* syntax error or E_EOF? */ 360 else if (PyErr_ExceptionMatches (PyExc_SyntaxError)) 361 { 362 PyErr_Fetch (&exc, &val, &trb); /* clears exception! */ 363 364 if (PyArg_ParseTuple (val, "sO", &msg, &obj) && 365 !strcmp (msg, "unexpected EOF while parsing")) /* E_EOF */ 366 { 367 Py_XDECREF (exc); 368 Py_XDECREF (val); 369 Py_XDECREF (trb); 370 prompt = ps2; 371 } 372 else /* some other syntax error */ 373 { 374 PyErr_Restore (exc, val, trb); 375 PyErr_Print (); 376 free (code); 377 code = NULL; 378 prompt = ps1; 379 } 380 } 381 else /* some non-syntax error */ 382 { 383 PyErr_Print (); 384 free (code); 385 code = NULL; 386 prompt = ps1; 387 } 388 389 free (line); 390 } 391 } 392 393 Py_XDECREF(glb); 394 Py_XDECREF(loc); 395 Py_Finalize(); 396 exit(0); 397 } 398 399 400How do I find undefined g++ symbols __builtin_new or __pure_virtual? 401-------------------------------------------------------------------- 402 403To dynamically load g++ extension modules, you must recompile Python, relink it 404using g++ (change LINKCC in the Python Modules Makefile), and link your 405extension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``). 406 407 408Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)? 409---------------------------------------------------------------------------------------------------------------- 410 411Yes, you can inherit from built-in classes such as :class:`int`, :class:`list`, 412:class:`dict`, etc. 413 414The Boost Python Library (BPL, http://www.boost.org/libs/python/doc/index.html) 415provides a way of doing this from C++ (i.e. you can inherit from an extension 416class written in C++ using the BPL). 417