blob: 7c684a092948ed32366ec57f4e8fe8f97f32d741 [file] [log] [blame]
Georg Brandld7413152009-10-11 21:25:26 +00001=======================
2Extending/Embedding FAQ
3=======================
4
5.. contents::
6
7.. highlight:: c
8
9
Georg Brandl62423cb2009-12-19 17:59:59 +000010.. XXX need review for Python 3.
11
12
Georg Brandld7413152009-10-11 21:25:26 +000013Can I create my own functions in C?
14-----------------------------------
15
16Yes, you can create built-in modules containing functions, variables, exceptions
17and even new types in C. This is explained in the document
18:ref:`extending-index`.
19
20Most intermediate or advanced Python books will also cover this topic.
21
22
23Can I create my own functions in C++?
24-------------------------------------
25
26Yes, using the C compatibility features found in C++. Place ``extern "C" {
27... }`` around the Python include files and put ``extern "C"`` before each
28function that is going to be called by the Python interpreter. Global or static
29C++ objects with constructors are probably not a good idea.
30
31
Georg Brandl4abda542010-07-12 09:00:29 +000032.. _c-wrapper-software:
33
Georg Brandld7413152009-10-11 21:25:26 +000034Writing C is hard; are there any alternatives?
35----------------------------------------------
36
37There are a number of alternatives to writing your own C extensions, depending
38on what you're trying to do.
39
Antoine Pitrou9cb41df2011-12-03 21:21:36 +010040.. XXX make sure these all work
Georg Brandld7413152009-10-11 21:25:26 +000041
Antoine Pitrou09264b62011-02-05 10:57:17 +000042`Cython <http://cython.org>`_ and its relative `Pyrex
43<http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/>`_ are compilers
44that accept a slightly modified form of Python and generate the corresponding
45C code. Cython and Pyrex make it possible to write an extension without having
46to learn Python's C API.
Georg Brandld7413152009-10-11 21:25:26 +000047
48If you need to interface to some C or C++ library for which no Python extension
49currently exists, you can try wrapping the library's data types and functions
50with a tool such as `SWIG <http://www.swig.org>`_. `SIP
Georg Brandl495f7b52009-10-27 15:28:25 +000051<http://www.riverbankcomputing.co.uk/software/sip/>`__, `CXX
Georg Brandld7413152009-10-11 21:25:26 +000052<http://cxx.sourceforge.net/>`_ `Boost
53<http://www.boost.org/libs/python/doc/index.html>`_, or `Weave
Ezio Melotti19192dd2010-04-05 13:25:51 +000054<http://www.scipy.org/Weave>`_ are also alternatives for wrapping
55C++ libraries.
Georg Brandld7413152009-10-11 21:25:26 +000056
57
58How can I execute arbitrary Python statements from C?
59-----------------------------------------------------
60
Georg Brandl60203b42010-10-06 10:11:56 +000061The highest-level function to do this is :c:func:`PyRun_SimpleString` which takes
Georg Brandld7413152009-10-11 21:25:26 +000062a single string argument to be executed in the context of the module
63``__main__`` and returns 0 for success and -1 when an exception occurred
64(including ``SyntaxError``). If you want more control, use
Georg Brandl60203b42010-10-06 10:11:56 +000065:c:func:`PyRun_String`; see the source for :c:func:`PyRun_SimpleString` in
Georg Brandld7413152009-10-11 21:25:26 +000066``Python/pythonrun.c``.
67
68
69How can I evaluate an arbitrary Python expression from C?
70---------------------------------------------------------
71
Georg Brandl60203b42010-10-06 10:11:56 +000072Call the function :c:func:`PyRun_String` from the previous question with the
73start symbol :c:data:`Py_eval_input`; it parses an expression, evaluates it and
Georg Brandld7413152009-10-11 21:25:26 +000074returns its value.
75
76
77How do I extract C values from a Python object?
78-----------------------------------------------
79
Georg Brandl60203b42010-10-06 10:11:56 +000080That depends on the object's type. If it's a tuple, :c:func:`PyTuple_Size`
81returns its length and :c:func:`PyTuple_GetItem` returns the item at a specified
82index. Lists have similar functions, :c:func:`PyListSize` and
83:c:func:`PyList_GetItem`.
Georg Brandld7413152009-10-11 21:25:26 +000084
Georg Brandl60203b42010-10-06 10:11:56 +000085For strings, :c:func:`PyString_Size` returns its length and
86:c:func:`PyString_AsString` a pointer to its value. Note that Python strings may
87contain null bytes so C's :c:func:`strlen` should not be used.
Georg Brandld7413152009-10-11 21:25:26 +000088
89To test the type of an object, first make sure it isn't *NULL*, and then use
Georg Brandl60203b42010-10-06 10:11:56 +000090:c:func:`PyString_Check`, :c:func:`PyTuple_Check`, :c:func:`PyList_Check`, etc.
Georg Brandld7413152009-10-11 21:25:26 +000091
92There is also a high-level API to Python objects which is provided by the
93so-called 'abstract' interface -- read ``Include/abstract.h`` for further
94details. It allows interfacing with any kind of Python sequence using calls
Georg Brandl60203b42010-10-06 10:11:56 +000095like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc.) as well as
Georg Brandld7413152009-10-11 21:25:26 +000096many other useful protocols.
97
98
99How do I use Py_BuildValue() to create a tuple of arbitrary length?
100-------------------------------------------------------------------
101
Antoine Pitrou48383bf2011-12-03 22:30:19 +0100102You can't. Use :c:func:`PyTuple_Pack` instead.
Georg Brandld7413152009-10-11 21:25:26 +0000103
104
105How do I call an object's method from C?
106----------------------------------------
107
Georg Brandl60203b42010-10-06 10:11:56 +0000108The :c:func:`PyObject_CallMethod` function can be used to call an arbitrary
Georg Brandld7413152009-10-11 21:25:26 +0000109method of an object. The parameters are the object, the name of the method to
Georg Brandl60203b42010-10-06 10:11:56 +0000110call, a format string like that used with :c:func:`Py_BuildValue`, and the
Georg Brandld7413152009-10-11 21:25:26 +0000111argument values::
112
113 PyObject *
114 PyObject_CallMethod(PyObject *object, char *method_name,
115 char *arg_format, ...);
116
117This works for any object that has methods -- whether built-in or user-defined.
Georg Brandl60203b42010-10-06 10:11:56 +0000118You are responsible for eventually :c:func:`Py_DECREF`\ 'ing the return value.
Georg Brandld7413152009-10-11 21:25:26 +0000119
120To call, e.g., a file object's "seek" method with arguments 10, 0 (assuming the
121file object pointer is "f")::
122
123 res = PyObject_CallMethod(f, "seek", "(ii)", 10, 0);
124 if (res == NULL) {
125 ... an exception occurred ...
126 }
127 else {
128 Py_DECREF(res);
129 }
130
Georg Brandl60203b42010-10-06 10:11:56 +0000131Note that since :c:func:`PyObject_CallObject` *always* wants a tuple for the
Georg Brandld7413152009-10-11 21:25:26 +0000132argument list, to call a function without arguments, pass "()" for the format,
133and to call a function with one argument, surround the argument in parentheses,
134e.g. "(i)".
135
136
137How do I catch the output from PyErr_Print() (or anything that prints to stdout/stderr)?
138----------------------------------------------------------------------------------------
139
140In Python code, define an object that supports the ``write()`` method. Assign
141this object to :data:`sys.stdout` and :data:`sys.stderr`. Call print_error, or
142just allow the standard traceback mechanism to work. Then, the output will go
143wherever your ``write()`` method sends it.
144
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100145The easiest way to do this is to use the :class:`io.StringIO` class::
Georg Brandld7413152009-10-11 21:25:26 +0000146
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100147 >>> import io, sys
148 >>> sys.stdout = io.StringIO()
149 >>> print('foo')
150 >>> print('hello world!')
151 >>> sys.stderr.write(sys.stdout.getvalue())
152 foo
153 hello world!
Georg Brandld7413152009-10-11 21:25:26 +0000154
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100155A custom object to do the same would look like this::
156
157 >>> import io, sys
158 >>> class StdoutCatcher(io.TextIOBase):
Georg Brandld7413152009-10-11 21:25:26 +0000159 ... def __init__(self):
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100160 ... self.data = []
Georg Brandld7413152009-10-11 21:25:26 +0000161 ... def write(self, stuff):
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100162 ... self.data.append(stuff)
Georg Brandld7413152009-10-11 21:25:26 +0000163 ...
164 >>> import sys
165 >>> sys.stdout = StdoutCatcher()
Georg Brandl62423cb2009-12-19 17:59:59 +0000166 >>> print('foo')
167 >>> print('hello world!')
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100168 >>> sys.stderr.write(''.join(sys.stdout.data))
Georg Brandld7413152009-10-11 21:25:26 +0000169 foo
170 hello world!
171
172
173How do I access a module written in Python from C?
174--------------------------------------------------
175
176You can get a pointer to the module object as follows::
177
178 module = PyImport_ImportModule("<modulename>");
179
180If the module hasn't been imported yet (i.e. it is not yet present in
181:data:`sys.modules`), this initializes the module; otherwise it simply returns
182the value of ``sys.modules["<modulename>"]``. Note that it doesn't enter the
183module into any namespace -- it only ensures it has been initialized and is
184stored in :data:`sys.modules`.
185
186You can then access the module's attributes (i.e. any name defined in the
187module) as follows::
188
189 attr = PyObject_GetAttrString(module, "<attrname>");
190
Georg Brandl60203b42010-10-06 10:11:56 +0000191Calling :c:func:`PyObject_SetAttrString` to assign to variables in the module
Georg Brandld7413152009-10-11 21:25:26 +0000192also works.
193
194
195How do I interface to C++ objects from Python?
196----------------------------------------------
197
198Depending on your requirements, there are many approaches. To do this manually,
199begin by reading :ref:`the "Extending and Embedding" document
200<extending-index>`. Realize that for the Python run-time system, there isn't a
201whole lot of difference between C and C++ -- so the strategy of building a new
202Python type around a C structure (pointer) type will also work for C++ objects.
203
Georg Brandl4abda542010-07-12 09:00:29 +0000204For C++ libraries, see :ref:`c-wrapper-software`.
Georg Brandld7413152009-10-11 21:25:26 +0000205
206
207I added a module using the Setup file and the make fails; why?
208--------------------------------------------------------------
209
210Setup must end in a newline, if there is no newline there, the build process
211fails. (Fixing this requires some ugly shell script hackery, and this bug is so
212minor that it doesn't seem worth the effort.)
213
214
215How do I debug an extension?
216----------------------------
217
218When using GDB with dynamically loaded extensions, you can't set a breakpoint in
219your extension until your extension is loaded.
220
221In your ``.gdbinit`` file (or interactively), add the command::
222
223 br _PyImport_LoadDynamicModule
224
225Then, when you run GDB::
226
227 $ gdb /local/bin/python
228 gdb) run myscript.py
229 gdb) continue # repeat until your extension is loaded
230 gdb) finish # so that your extension is loaded
231 gdb) br myfunction.c:50
232 gdb) continue
233
234I want to compile a Python module on my Linux system, but some files are missing. Why?
235--------------------------------------------------------------------------------------
236
237Most packaged versions of Python don't include the
238:file:`/usr/lib/python2.{x}/config/` directory, which contains various files
239required for compiling Python extensions.
240
241For Red Hat, install the python-devel RPM to get the necessary files.
242
243For Debian, run ``apt-get install python-dev``.
244
245
246What does "SystemError: _PyImport_FixupExtension: module yourmodule not loaded" mean?
247-------------------------------------------------------------------------------------
248
249This means that you have created an extension module named "yourmodule", but
250your module init function does not initialize with that name.
251
252Every module init function will have a line similar to::
253
254 module = Py_InitModule("yourmodule", yourmodule_functions);
255
256If the string passed to this function is not the same name as your extension
257module, the :exc:`SystemError` exception will be raised.
258
259
260How do I tell "incomplete input" from "invalid input"?
261------------------------------------------------------
262
263Sometimes you want to emulate the Python interactive interpreter's behavior,
264where it gives you a continuation prompt when the input is incomplete (e.g. you
265typed the start of an "if" statement or you didn't close your parentheses or
266triple string quotes), but it gives you a syntax error message immediately when
267the input is invalid.
268
269In Python you can use the :mod:`codeop` module, which approximates the parser's
270behavior sufficiently. IDLE uses this, for example.
271
Georg Brandl60203b42010-10-06 10:11:56 +0000272The easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` (perhaps
Georg Brandld7413152009-10-11 21:25:26 +0000273in a separate thread) and let the Python interpreter handle the input for
Georg Brandl60203b42010-10-06 10:11:56 +0000274you. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` to point at your
Georg Brandld7413152009-10-11 21:25:26 +0000275custom input function. See ``Modules/readline.c`` and ``Parser/myreadline.c``
276for more hints.
277
278However sometimes you have to run the embedded Python interpreter in the same
279thread as your rest application and you can't allow the
Georg Brandl60203b42010-10-06 10:11:56 +0000280:c:func:`PyRun_InteractiveLoop` to stop while waiting for user input. The one
281solution then is to call :c:func:`PyParser_ParseString` and test for ``e.error``
Georg Brandld7413152009-10-11 21:25:26 +0000282equal to ``E_EOF``, which means the input is incomplete). Here's a sample code
283fragment, untested, inspired by code from Alex Farber::
284
285 #include <Python.h>
286 #include <node.h>
287 #include <errcode.h>
288 #include <grammar.h>
289 #include <parsetok.h>
290 #include <compile.h>
291
292 int testcomplete(char *code)
293 /* code should end in \n */
294 /* return -1 for error, 0 for incomplete, 1 for complete */
295 {
296 node *n;
297 perrdetail e;
298
299 n = PyParser_ParseString(code, &_PyParser_Grammar,
300 Py_file_input, &e);
301 if (n == NULL) {
302 if (e.error == E_EOF)
303 return 0;
304 return -1;
305 }
306
307 PyNode_Free(n);
308 return 1;
309 }
310
311Another solution is trying to compile the received string with
Georg Brandl60203b42010-10-06 10:11:56 +0000312:c:func:`Py_CompileString`. If it compiles without errors, try to execute the
313returned code object by calling :c:func:`PyEval_EvalCode`. Otherwise save the
Georg Brandld7413152009-10-11 21:25:26 +0000314input for later. If the compilation fails, find out if it's an error or just
315more input is required - by extracting the message string from the exception
316tuple and comparing it to the string "unexpected EOF while parsing". Here is a
317complete example using the GNU readline library (you may want to ignore
318**SIGINT** while calling readline())::
319
320 #include <stdio.h>
321 #include <readline.h>
322
323 #include <Python.h>
324 #include <object.h>
325 #include <compile.h>
326 #include <eval.h>
327
328 int main (int argc, char* argv[])
329 {
330 int i, j, done = 0; /* lengths of line, code */
331 char ps1[] = ">>> ";
332 char ps2[] = "... ";
333 char *prompt = ps1;
334 char *msg, *line, *code = NULL;
335 PyObject *src, *glb, *loc;
336 PyObject *exc, *val, *trb, *obj, *dum;
337
338 Py_Initialize ();
339 loc = PyDict_New ();
340 glb = PyDict_New ();
341 PyDict_SetItemString (glb, "__builtins__", PyEval_GetBuiltins ());
342
343 while (!done)
344 {
345 line = readline (prompt);
346
347 if (NULL == line) /* CTRL-D pressed */
348 {
349 done = 1;
350 }
351 else
352 {
353 i = strlen (line);
354
355 if (i > 0)
356 add_history (line); /* save non-empty lines */
357
358 if (NULL == code) /* nothing in code yet */
359 j = 0;
360 else
361 j = strlen (code);
362
363 code = realloc (code, i + j + 2);
364 if (NULL == code) /* out of memory */
365 exit (1);
366
367 if (0 == j) /* code was empty, so */
368 code[0] = '\0'; /* keep strncat happy */
369
370 strncat (code, line, i); /* append line to code */
371 code[i + j] = '\n'; /* append '\n' to code */
372 code[i + j + 1] = '\0';
373
374 src = Py_CompileString (code, "<stdin>", Py_single_input);
375
376 if (NULL != src) /* compiled just fine - */
377 {
378 if (ps1 == prompt || /* ">>> " or */
379 '\n' == code[i + j - 1]) /* "... " and double '\n' */
380 { /* so execute it */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000381 dum = PyEval_EvalCode (src, glb, loc);
Georg Brandld7413152009-10-11 21:25:26 +0000382 Py_XDECREF (dum);
383 Py_XDECREF (src);
384 free (code);
385 code = NULL;
386 if (PyErr_Occurred ())
387 PyErr_Print ();
388 prompt = ps1;
389 }
390 } /* syntax error or E_EOF? */
391 else if (PyErr_ExceptionMatches (PyExc_SyntaxError))
392 {
393 PyErr_Fetch (&exc, &val, &trb); /* clears exception! */
394
395 if (PyArg_ParseTuple (val, "sO", &msg, &obj) &&
396 !strcmp (msg, "unexpected EOF while parsing")) /* E_EOF */
397 {
398 Py_XDECREF (exc);
399 Py_XDECREF (val);
400 Py_XDECREF (trb);
401 prompt = ps2;
402 }
403 else /* some other syntax error */
404 {
405 PyErr_Restore (exc, val, trb);
406 PyErr_Print ();
407 free (code);
408 code = NULL;
409 prompt = ps1;
410 }
411 }
412 else /* some non-syntax error */
413 {
414 PyErr_Print ();
415 free (code);
416 code = NULL;
417 prompt = ps1;
418 }
419
420 free (line);
421 }
422 }
423
424 Py_XDECREF(glb);
425 Py_XDECREF(loc);
426 Py_Finalize();
427 exit(0);
428 }
429
430
431How do I find undefined g++ symbols __builtin_new or __pure_virtual?
432--------------------------------------------------------------------
433
434To dynamically load g++ extension modules, you must recompile Python, relink it
Ezio Melotti0639d5a2009-12-19 23:26:38 +0000435using g++ (change LINKCC in the Python Modules Makefile), and link your
Georg Brandld7413152009-10-11 21:25:26 +0000436extension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``).
437
438
439Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)?
440----------------------------------------------------------------------------------------------------------------
441
Georg Brandlc4a55fc2010-02-06 18:46:57 +0000442In Python 2.2, you can inherit from built-in classes such as :class:`int`,
Georg Brandld7413152009-10-11 21:25:26 +0000443:class:`list`, :class:`dict`, etc.
444
445The Boost Python Library (BPL, http://www.boost.org/libs/python/doc/index.html)
446provides a way of doing this from C++ (i.e. you can inherit from an extension
447class written in C++ using the BPL).
448
449
450When importing module X, why do I get "undefined symbol: PyUnicodeUCS2*"?
451-------------------------------------------------------------------------
452
453You are using a version of Python that uses a 4-byte representation for Unicode
454characters, but some C extension module you are importing was compiled using a
455Python that uses a 2-byte representation for Unicode characters (the default).
456
457If instead the name of the undefined symbol starts with ``PyUnicodeUCS4``, the
458problem is the reverse: Python was built using 2-byte Unicode characters, and
459the extension module was compiled using a Python with 4-byte Unicode characters.
460
461This can easily occur when using pre-built extension packages. RedHat Linux
4627.x, in particular, provided a "python2" binary that is compiled with 4-byte
463Unicode. This only causes the link failure if the extension uses any of the
464``PyUnicode_*()`` functions. It is also a problem if an extension uses any of
Georg Brandl60203b42010-10-06 10:11:56 +0000465the Unicode-related format specifiers for :c:func:`Py_BuildValue` (or similar) or
466parameter specifications for :c:func:`PyArg_ParseTuple`.
Georg Brandld7413152009-10-11 21:25:26 +0000467
468You can check the size of the Unicode character a Python interpreter is using by
469checking the value of sys.maxunicode:
470
471 >>> import sys
472 >>> if sys.maxunicode > 65535:
Georg Brandl62423cb2009-12-19 17:59:59 +0000473 ... print('UCS4 build')
Georg Brandld7413152009-10-11 21:25:26 +0000474 ... else:
Georg Brandl62423cb2009-12-19 17:59:59 +0000475 ... print('UCS2 build')
Georg Brandld7413152009-10-11 21:25:26 +0000476
477The only way to solve this problem is to use extension modules compiled with a
478Python binary built using the same size for Unicode characters.