blob: d196e861766a592fa2ddf9a57bb3bf665fe93a71 [file] [log] [blame]
Georg Brandld7413152009-10-11 21:25:26 +00001=======================
2Extending/Embedding FAQ
3=======================
4
Georg Brandl44ea77b2013-03-28 13:28:44 +01005.. only:: html
6
7 .. contents::
Georg Brandld7413152009-10-11 21:25:26 +00008
9.. highlight:: c
10
11
Georg Brandl62423cb2009-12-19 17:59:59 +000012.. XXX need review for Python 3.
13
14
Georg Brandld7413152009-10-11 21:25:26 +000015Can 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
Georg Brandl4abda542010-07-12 09:00:29 +000034.. _c-wrapper-software:
35
Georg Brandld7413152009-10-11 21:25:26 +000036Writing 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
Antoine Pitrou9cb41df2011-12-03 21:21:36 +010042.. XXX make sure these all work
Georg Brandld7413152009-10-11 21:25:26 +000043
Antoine Pitrou09264b62011-02-05 10:57:17 +000044`Cython <http://cython.org>`_ and its relative `Pyrex
45<http://www.cosc.canterbury.ac.nz/~greg/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.
Georg Brandld7413152009-10-11 21:25:26 +000049
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
Georg Brandl495f7b52009-10-27 15:28:25 +000053<http://www.riverbankcomputing.co.uk/software/sip/>`__, `CXX
Georg Brandld7413152009-10-11 21:25:26 +000054<http://cxx.sourceforge.net/>`_ `Boost
55<http://www.boost.org/libs/python/doc/index.html>`_, or `Weave
Ezio Melotti19192dd2010-04-05 13:25:51 +000056<http://www.scipy.org/Weave>`_ are also alternatives for wrapping
57C++ libraries.
Georg Brandld7413152009-10-11 21:25:26 +000058
59
60How can I execute arbitrary Python statements from C?
61-----------------------------------------------------
62
Georg Brandl60203b42010-10-06 10:11:56 +000063The highest-level function to do this is :c:func:`PyRun_SimpleString` which takes
Georg Brandld7413152009-10-11 21:25:26 +000064a 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 ``SyntaxError``). If you want more control, use
Georg Brandl60203b42010-10-06 10:11:56 +000067:c:func:`PyRun_String`; see the source for :c:func:`PyRun_SimpleString` in
Georg Brandld7413152009-10-11 21:25:26 +000068``Python/pythonrun.c``.
69
70
71How can I evaluate an arbitrary Python expression from C?
72---------------------------------------------------------
73
Georg Brandl60203b42010-10-06 10:11:56 +000074Call 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
Georg Brandld7413152009-10-11 21:25:26 +000076returns its value.
77
78
79How do I extract C values from a Python object?
80-----------------------------------------------
81
Georg Brandl60203b42010-10-06 10:11:56 +000082That 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`.
Georg Brandld7413152009-10-11 21:25:26 +000086
Gregory P. Smith4b52ae82013-03-22 13:43:30 -070087For 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.
Georg Brandld7413152009-10-11 21:25:26 +000091
92To test the type of an object, first make sure it isn't *NULL*, and then use
Gregory P. Smith4b52ae82013-03-22 13:43:30 -070093:c:func:`PyBytes_Check`, :c:func:`PyTuple_Check`, :c:func:`PyList_Check`, etc.
Georg Brandld7413152009-10-11 21:25:26 +000094
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
Zachary Ware2f31b4b2014-03-20 10:16:09 -050098like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc. as well
99as many other useful protocols such as numbers (:c:func:`PyNumber_Index` et
Gregory P. Smith4b52ae82013-03-22 13:43:30 -0700100al.) and mappings in the PyMapping APIs.
Georg Brandld7413152009-10-11 21:25:26 +0000101
102
103How do I use Py_BuildValue() to create a tuple of arbitrary length?
104-------------------------------------------------------------------
105
Antoine Pitrou48383bf2011-12-03 22:30:19 +0100106You can't. Use :c:func:`PyTuple_Pack` instead.
Georg Brandld7413152009-10-11 21:25:26 +0000107
108
109How do I call an object's method from C?
110----------------------------------------
111
Georg Brandl60203b42010-10-06 10:11:56 +0000112The :c:func:`PyObject_CallMethod` function can be used to call an arbitrary
Georg Brandld7413152009-10-11 21:25:26 +0000113method of an object. The parameters are the object, the name of the method to
Georg Brandl60203b42010-10-06 10:11:56 +0000114call, a format string like that used with :c:func:`Py_BuildValue`, and the
Georg Brandld7413152009-10-11 21:25:26 +0000115argument values::
116
117 PyObject *
118 PyObject_CallMethod(PyObject *object, char *method_name,
119 char *arg_format, ...);
120
121This works for any object that has methods -- whether built-in or user-defined.
Georg Brandl60203b42010-10-06 10:11:56 +0000122You are responsible for eventually :c:func:`Py_DECREF`\ 'ing the return value.
Georg Brandld7413152009-10-11 21:25:26 +0000123
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
Georg Brandl60203b42010-10-06 10:11:56 +0000135Note that since :c:func:`PyObject_CallObject` *always* wants a tuple for the
Georg Brandld7413152009-10-11 21:25:26 +0000136argument 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
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100149The easiest way to do this is to use the :class:`io.StringIO` class::
Georg Brandld7413152009-10-11 21:25:26 +0000150
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100151 >>> import io, sys
152 >>> sys.stdout = io.StringIO()
153 >>> print('foo')
154 >>> print('hello world!')
155 >>> sys.stderr.write(sys.stdout.getvalue())
156 foo
157 hello world!
Georg Brandld7413152009-10-11 21:25:26 +0000158
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100159A custom object to do the same would look like this::
160
161 >>> import io, sys
162 >>> class StdoutCatcher(io.TextIOBase):
Georg Brandld7413152009-10-11 21:25:26 +0000163 ... def __init__(self):
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100164 ... self.data = []
Georg Brandld7413152009-10-11 21:25:26 +0000165 ... def write(self, stuff):
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100166 ... self.data.append(stuff)
Georg Brandld7413152009-10-11 21:25:26 +0000167 ...
168 >>> import sys
169 >>> sys.stdout = StdoutCatcher()
Georg Brandl62423cb2009-12-19 17:59:59 +0000170 >>> print('foo')
171 >>> print('hello world!')
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100172 >>> sys.stderr.write(''.join(sys.stdout.data))
Georg Brandld7413152009-10-11 21:25:26 +0000173 foo
174 hello world!
175
176
177How do I access a module written in Python from C?
178--------------------------------------------------
179
180You can get a pointer to the module object as follows::
181
182 module = PyImport_ImportModule("<modulename>");
183
184If the module hasn't been imported yet (i.e. it is not yet present in
185:data:`sys.modules`), this initializes the module; otherwise it simply returns
186the value of ``sys.modules["<modulename>"]``. Note that it doesn't enter the
187module into any namespace -- it only ensures it has been initialized and is
188stored in :data:`sys.modules`.
189
190You can then access the module's attributes (i.e. any name defined in the
191module) as follows::
192
193 attr = PyObject_GetAttrString(module, "<attrname>");
194
Georg Brandl60203b42010-10-06 10:11:56 +0000195Calling :c:func:`PyObject_SetAttrString` to assign to variables in the module
Georg Brandld7413152009-10-11 21:25:26 +0000196also works.
197
198
199How do I interface to C++ objects from Python?
200----------------------------------------------
201
202Depending on your requirements, there are many approaches. To do this manually,
203begin by reading :ref:`the "Extending and Embedding" document
204<extending-index>`. Realize that for the Python run-time system, there isn't a
205whole lot of difference between C and C++ -- so the strategy of building a new
206Python type around a C structure (pointer) type will also work for C++ objects.
207
Georg Brandl4abda542010-07-12 09:00:29 +0000208For C++ libraries, see :ref:`c-wrapper-software`.
Georg Brandld7413152009-10-11 21:25:26 +0000209
210
211I added a module using the Setup file and the make fails; why?
212--------------------------------------------------------------
213
214Setup must end in a newline, if there is no newline there, the build process
215fails. (Fixing this requires some ugly shell script hackery, and this bug is so
216minor that it doesn't seem worth the effort.)
217
218
219How do I debug an extension?
220----------------------------
221
222When using GDB with dynamically loaded extensions, you can't set a breakpoint in
223your extension until your extension is loaded.
224
225In your ``.gdbinit`` file (or interactively), add the command::
226
227 br _PyImport_LoadDynamicModule
228
229Then, when you run GDB::
230
231 $ gdb /local/bin/python
232 gdb) run myscript.py
233 gdb) continue # repeat until your extension is loaded
234 gdb) finish # so that your extension is loaded
235 gdb) br myfunction.c:50
236 gdb) continue
237
238I want to compile a Python module on my Linux system, but some files are missing. Why?
239--------------------------------------------------------------------------------------
240
241Most packaged versions of Python don't include the
242:file:`/usr/lib/python2.{x}/config/` directory, which contains various files
243required for compiling Python extensions.
244
245For Red Hat, install the python-devel RPM to get the necessary files.
246
247For Debian, run ``apt-get install python-dev``.
248
249
250What does "SystemError: _PyImport_FixupExtension: module yourmodule not loaded" mean?
251-------------------------------------------------------------------------------------
252
253This means that you have created an extension module named "yourmodule", but
254your module init function does not initialize with that name.
255
256Every module init function will have a line similar to::
257
258 module = Py_InitModule("yourmodule", yourmodule_functions);
259
260If the string passed to this function is not the same name as your extension
261module, the :exc:`SystemError` exception will be raised.
262
263
264How do I tell "incomplete input" from "invalid input"?
265------------------------------------------------------
266
267Sometimes you want to emulate the Python interactive interpreter's behavior,
268where it gives you a continuation prompt when the input is incomplete (e.g. you
269typed the start of an "if" statement or you didn't close your parentheses or
270triple string quotes), but it gives you a syntax error message immediately when
271the input is invalid.
272
273In Python you can use the :mod:`codeop` module, which approximates the parser's
274behavior sufficiently. IDLE uses this, for example.
275
Georg Brandl60203b42010-10-06 10:11:56 +0000276The easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` (perhaps
Georg Brandld7413152009-10-11 21:25:26 +0000277in a separate thread) and let the Python interpreter handle the input for
Georg Brandl60203b42010-10-06 10:11:56 +0000278you. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` to point at your
Georg Brandld7413152009-10-11 21:25:26 +0000279custom input function. See ``Modules/readline.c`` and ``Parser/myreadline.c``
280for more hints.
281
282However sometimes you have to run the embedded Python interpreter in the same
283thread as your rest application and you can't allow the
Georg Brandl60203b42010-10-06 10:11:56 +0000284:c:func:`PyRun_InteractiveLoop` to stop while waiting for user input. The one
285solution then is to call :c:func:`PyParser_ParseString` and test for ``e.error``
Georg Brandld7413152009-10-11 21:25:26 +0000286equal to ``E_EOF``, which means the input is incomplete). Here's a sample code
287fragment, untested, inspired by code from Alex Farber::
288
289 #include <Python.h>
290 #include <node.h>
291 #include <errcode.h>
292 #include <grammar.h>
293 #include <parsetok.h>
294 #include <compile.h>
295
296 int testcomplete(char *code)
297 /* code should end in \n */
298 /* return -1 for error, 0 for incomplete, 1 for complete */
299 {
300 node *n;
301 perrdetail e;
302
303 n = PyParser_ParseString(code, &_PyParser_Grammar,
304 Py_file_input, &e);
305 if (n == NULL) {
306 if (e.error == E_EOF)
307 return 0;
308 return -1;
309 }
310
311 PyNode_Free(n);
312 return 1;
313 }
314
315Another solution is trying to compile the received string with
Georg Brandl60203b42010-10-06 10:11:56 +0000316:c:func:`Py_CompileString`. If it compiles without errors, try to execute the
317returned code object by calling :c:func:`PyEval_EvalCode`. Otherwise save the
Georg Brandld7413152009-10-11 21:25:26 +0000318input for later. If the compilation fails, find out if it's an error or just
319more input is required - by extracting the message string from the exception
320tuple and comparing it to the string "unexpected EOF while parsing". Here is a
321complete example using the GNU readline library (you may want to ignore
322**SIGINT** while calling readline())::
323
324 #include <stdio.h>
325 #include <readline.h>
326
327 #include <Python.h>
328 #include <object.h>
329 #include <compile.h>
330 #include <eval.h>
331
332 int main (int argc, char* argv[])
333 {
334 int i, j, done = 0; /* lengths of line, code */
335 char ps1[] = ">>> ";
336 char ps2[] = "... ";
337 char *prompt = ps1;
338 char *msg, *line, *code = NULL;
339 PyObject *src, *glb, *loc;
340 PyObject *exc, *val, *trb, *obj, *dum;
341
342 Py_Initialize ();
343 loc = PyDict_New ();
344 glb = PyDict_New ();
345 PyDict_SetItemString (glb, "__builtins__", PyEval_GetBuiltins ());
346
347 while (!done)
348 {
349 line = readline (prompt);
350
351 if (NULL == line) /* CTRL-D pressed */
352 {
353 done = 1;
354 }
355 else
356 {
357 i = strlen (line);
358
359 if (i > 0)
360 add_history (line); /* save non-empty lines */
361
362 if (NULL == code) /* nothing in code yet */
363 j = 0;
364 else
365 j = strlen (code);
366
367 code = realloc (code, i + j + 2);
368 if (NULL == code) /* out of memory */
369 exit (1);
370
371 if (0 == j) /* code was empty, so */
372 code[0] = '\0'; /* keep strncat happy */
373
374 strncat (code, line, i); /* append line to code */
375 code[i + j] = '\n'; /* append '\n' to code */
376 code[i + j + 1] = '\0';
377
378 src = Py_CompileString (code, "<stdin>", Py_single_input);
379
380 if (NULL != src) /* compiled just fine - */
381 {
382 if (ps1 == prompt || /* ">>> " or */
383 '\n' == code[i + j - 1]) /* "... " and double '\n' */
384 { /* so execute it */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000385 dum = PyEval_EvalCode (src, glb, loc);
Georg Brandld7413152009-10-11 21:25:26 +0000386 Py_XDECREF (dum);
387 Py_XDECREF (src);
388 free (code);
389 code = NULL;
390 if (PyErr_Occurred ())
391 PyErr_Print ();
392 prompt = ps1;
393 }
394 } /* syntax error or E_EOF? */
395 else if (PyErr_ExceptionMatches (PyExc_SyntaxError))
396 {
397 PyErr_Fetch (&exc, &val, &trb); /* clears exception! */
398
399 if (PyArg_ParseTuple (val, "sO", &msg, &obj) &&
400 !strcmp (msg, "unexpected EOF while parsing")) /* E_EOF */
401 {
402 Py_XDECREF (exc);
403 Py_XDECREF (val);
404 Py_XDECREF (trb);
405 prompt = ps2;
406 }
407 else /* some other syntax error */
408 {
409 PyErr_Restore (exc, val, trb);
410 PyErr_Print ();
411 free (code);
412 code = NULL;
413 prompt = ps1;
414 }
415 }
416 else /* some non-syntax error */
417 {
418 PyErr_Print ();
419 free (code);
420 code = NULL;
421 prompt = ps1;
422 }
423
424 free (line);
425 }
426 }
427
428 Py_XDECREF(glb);
429 Py_XDECREF(loc);
430 Py_Finalize();
431 exit(0);
432 }
433
434
435How do I find undefined g++ symbols __builtin_new or __pure_virtual?
436--------------------------------------------------------------------
437
438To dynamically load g++ extension modules, you must recompile Python, relink it
Ezio Melotti0639d5a2009-12-19 23:26:38 +0000439using g++ (change LINKCC in the Python Modules Makefile), and link your
Georg Brandld7413152009-10-11 21:25:26 +0000440extension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``).
441
442
443Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)?
444----------------------------------------------------------------------------------------------------------------
445
Georg Brandlc4a55fc2010-02-06 18:46:57 +0000446In Python 2.2, you can inherit from built-in classes such as :class:`int`,
Georg Brandld7413152009-10-11 21:25:26 +0000447:class:`list`, :class:`dict`, etc.
448
449The Boost Python Library (BPL, http://www.boost.org/libs/python/doc/index.html)
450provides a way of doing this from C++ (i.e. you can inherit from an extension
451class written in C++ using the BPL).