blob: f862151f2305300e49fd38e9572ea86b9e299161 [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
Gregory P. Smith4b52ae82013-03-22 13:43:30 -070085For bytes, :c:func:`PyBytes_Size` returns its length and
86:c:func:`PyBytes_AsStringAndSize` provides a pointer to its value and its
87length. Note that Python bytes objects may contain null bytes so C's
88:c:func:`strlen` should not be used.
Georg Brandld7413152009-10-11 21:25:26 +000089
90To test the type of an object, first make sure it isn't *NULL*, and then use
Gregory P. Smith4b52ae82013-03-22 13:43:30 -070091:c:func:`PyBytes_Check`, :c:func:`PyTuple_Check`, :c:func:`PyList_Check`, etc.
Georg Brandld7413152009-10-11 21:25:26 +000092
93There is also a high-level API to Python objects which is provided by the
94so-called 'abstract' interface -- read ``Include/abstract.h`` for further
95details. It allows interfacing with any kind of Python sequence using calls
Gregory P. Smith4b52ae82013-03-22 13:43:30 -070096like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc.) as well
97as many other useful protocols such as numbers (:c:func:`PyNumber_Index` et.
98al.) and mappings in the PyMapping APIs.
Georg Brandld7413152009-10-11 21:25:26 +000099
100
101How do I use Py_BuildValue() to create a tuple of arbitrary length?
102-------------------------------------------------------------------
103
Antoine Pitrou48383bf2011-12-03 22:30:19 +0100104You can't. Use :c:func:`PyTuple_Pack` instead.
Georg Brandld7413152009-10-11 21:25:26 +0000105
106
107How do I call an object's method from C?
108----------------------------------------
109
Georg Brandl60203b42010-10-06 10:11:56 +0000110The :c:func:`PyObject_CallMethod` function can be used to call an arbitrary
Georg Brandld7413152009-10-11 21:25:26 +0000111method of an object. The parameters are the object, the name of the method to
Georg Brandl60203b42010-10-06 10:11:56 +0000112call, a format string like that used with :c:func:`Py_BuildValue`, and the
Georg Brandld7413152009-10-11 21:25:26 +0000113argument values::
114
115 PyObject *
116 PyObject_CallMethod(PyObject *object, char *method_name,
117 char *arg_format, ...);
118
119This works for any object that has methods -- whether built-in or user-defined.
Georg Brandl60203b42010-10-06 10:11:56 +0000120You are responsible for eventually :c:func:`Py_DECREF`\ 'ing the return value.
Georg Brandld7413152009-10-11 21:25:26 +0000121
122To call, e.g., a file object's "seek" method with arguments 10, 0 (assuming the
123file object pointer is "f")::
124
125 res = PyObject_CallMethod(f, "seek", "(ii)", 10, 0);
126 if (res == NULL) {
127 ... an exception occurred ...
128 }
129 else {
130 Py_DECREF(res);
131 }
132
Georg Brandl60203b42010-10-06 10:11:56 +0000133Note that since :c:func:`PyObject_CallObject` *always* wants a tuple for the
Georg Brandld7413152009-10-11 21:25:26 +0000134argument list, to call a function without arguments, pass "()" for the format,
135and to call a function with one argument, surround the argument in parentheses,
136e.g. "(i)".
137
138
139How do I catch the output from PyErr_Print() (or anything that prints to stdout/stderr)?
140----------------------------------------------------------------------------------------
141
142In Python code, define an object that supports the ``write()`` method. Assign
143this object to :data:`sys.stdout` and :data:`sys.stderr`. Call print_error, or
144just allow the standard traceback mechanism to work. Then, the output will go
145wherever your ``write()`` method sends it.
146
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100147The easiest way to do this is to use the :class:`io.StringIO` class::
Georg Brandld7413152009-10-11 21:25:26 +0000148
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100149 >>> import io, sys
150 >>> sys.stdout = io.StringIO()
151 >>> print('foo')
152 >>> print('hello world!')
153 >>> sys.stderr.write(sys.stdout.getvalue())
154 foo
155 hello world!
Georg Brandld7413152009-10-11 21:25:26 +0000156
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100157A custom object to do the same would look like this::
158
159 >>> import io, sys
160 >>> class StdoutCatcher(io.TextIOBase):
Georg Brandld7413152009-10-11 21:25:26 +0000161 ... def __init__(self):
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100162 ... self.data = []
Georg Brandld7413152009-10-11 21:25:26 +0000163 ... def write(self, stuff):
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100164 ... self.data.append(stuff)
Georg Brandld7413152009-10-11 21:25:26 +0000165 ...
166 >>> import sys
167 >>> sys.stdout = StdoutCatcher()
Georg Brandl62423cb2009-12-19 17:59:59 +0000168 >>> print('foo')
169 >>> print('hello world!')
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100170 >>> sys.stderr.write(''.join(sys.stdout.data))
Georg Brandld7413152009-10-11 21:25:26 +0000171 foo
172 hello world!
173
174
175How do I access a module written in Python from C?
176--------------------------------------------------
177
178You can get a pointer to the module object as follows::
179
180 module = PyImport_ImportModule("<modulename>");
181
182If the module hasn't been imported yet (i.e. it is not yet present in
183:data:`sys.modules`), this initializes the module; otherwise it simply returns
184the value of ``sys.modules["<modulename>"]``. Note that it doesn't enter the
185module into any namespace -- it only ensures it has been initialized and is
186stored in :data:`sys.modules`.
187
188You can then access the module's attributes (i.e. any name defined in the
189module) as follows::
190
191 attr = PyObject_GetAttrString(module, "<attrname>");
192
Georg Brandl60203b42010-10-06 10:11:56 +0000193Calling :c:func:`PyObject_SetAttrString` to assign to variables in the module
Georg Brandld7413152009-10-11 21:25:26 +0000194also works.
195
196
197How do I interface to C++ objects from Python?
198----------------------------------------------
199
200Depending on your requirements, there are many approaches. To do this manually,
201begin by reading :ref:`the "Extending and Embedding" document
202<extending-index>`. Realize that for the Python run-time system, there isn't a
203whole lot of difference between C and C++ -- so the strategy of building a new
204Python type around a C structure (pointer) type will also work for C++ objects.
205
Georg Brandl4abda542010-07-12 09:00:29 +0000206For C++ libraries, see :ref:`c-wrapper-software`.
Georg Brandld7413152009-10-11 21:25:26 +0000207
208
209I added a module using the Setup file and the make fails; why?
210--------------------------------------------------------------
211
212Setup must end in a newline, if there is no newline there, the build process
213fails. (Fixing this requires some ugly shell script hackery, and this bug is so
214minor that it doesn't seem worth the effort.)
215
216
217How do I debug an extension?
218----------------------------
219
220When using GDB with dynamically loaded extensions, you can't set a breakpoint in
221your extension until your extension is loaded.
222
223In your ``.gdbinit`` file (or interactively), add the command::
224
225 br _PyImport_LoadDynamicModule
226
227Then, when you run GDB::
228
229 $ gdb /local/bin/python
230 gdb) run myscript.py
231 gdb) continue # repeat until your extension is loaded
232 gdb) finish # so that your extension is loaded
233 gdb) br myfunction.c:50
234 gdb) continue
235
236I want to compile a Python module on my Linux system, but some files are missing. Why?
237--------------------------------------------------------------------------------------
238
239Most packaged versions of Python don't include the
240:file:`/usr/lib/python2.{x}/config/` directory, which contains various files
241required for compiling Python extensions.
242
243For Red Hat, install the python-devel RPM to get the necessary files.
244
245For Debian, run ``apt-get install python-dev``.
246
247
248What does "SystemError: _PyImport_FixupExtension: module yourmodule not loaded" mean?
249-------------------------------------------------------------------------------------
250
251This means that you have created an extension module named "yourmodule", but
252your module init function does not initialize with that name.
253
254Every module init function will have a line similar to::
255
256 module = Py_InitModule("yourmodule", yourmodule_functions);
257
258If the string passed to this function is not the same name as your extension
259module, the :exc:`SystemError` exception will be raised.
260
261
262How do I tell "incomplete input" from "invalid input"?
263------------------------------------------------------
264
265Sometimes you want to emulate the Python interactive interpreter's behavior,
266where it gives you a continuation prompt when the input is incomplete (e.g. you
267typed the start of an "if" statement or you didn't close your parentheses or
268triple string quotes), but it gives you a syntax error message immediately when
269the input is invalid.
270
271In Python you can use the :mod:`codeop` module, which approximates the parser's
272behavior sufficiently. IDLE uses this, for example.
273
Georg Brandl60203b42010-10-06 10:11:56 +0000274The easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` (perhaps
Georg Brandld7413152009-10-11 21:25:26 +0000275in a separate thread) and let the Python interpreter handle the input for
Georg Brandl60203b42010-10-06 10:11:56 +0000276you. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` to point at your
Georg Brandld7413152009-10-11 21:25:26 +0000277custom input function. See ``Modules/readline.c`` and ``Parser/myreadline.c``
278for more hints.
279
280However sometimes you have to run the embedded Python interpreter in the same
281thread as your rest application and you can't allow the
Georg Brandl60203b42010-10-06 10:11:56 +0000282:c:func:`PyRun_InteractiveLoop` to stop while waiting for user input. The one
283solution then is to call :c:func:`PyParser_ParseString` and test for ``e.error``
Georg Brandld7413152009-10-11 21:25:26 +0000284equal to ``E_EOF``, which means the input is incomplete). Here's a sample code
285fragment, untested, inspired by code from Alex Farber::
286
287 #include <Python.h>
288 #include <node.h>
289 #include <errcode.h>
290 #include <grammar.h>
291 #include <parsetok.h>
292 #include <compile.h>
293
294 int testcomplete(char *code)
295 /* code should end in \n */
296 /* return -1 for error, 0 for incomplete, 1 for complete */
297 {
298 node *n;
299 perrdetail e;
300
301 n = PyParser_ParseString(code, &_PyParser_Grammar,
302 Py_file_input, &e);
303 if (n == NULL) {
304 if (e.error == E_EOF)
305 return 0;
306 return -1;
307 }
308
309 PyNode_Free(n);
310 return 1;
311 }
312
313Another solution is trying to compile the received string with
Georg Brandl60203b42010-10-06 10:11:56 +0000314:c:func:`Py_CompileString`. If it compiles without errors, try to execute the
315returned code object by calling :c:func:`PyEval_EvalCode`. Otherwise save the
Georg Brandld7413152009-10-11 21:25:26 +0000316input for later. If the compilation fails, find out if it's an error or just
317more input is required - by extracting the message string from the exception
318tuple and comparing it to the string "unexpected EOF while parsing". Here is a
319complete example using the GNU readline library (you may want to ignore
320**SIGINT** while calling readline())::
321
322 #include <stdio.h>
323 #include <readline.h>
324
325 #include <Python.h>
326 #include <object.h>
327 #include <compile.h>
328 #include <eval.h>
329
330 int main (int argc, char* argv[])
331 {
332 int i, j, done = 0; /* lengths of line, code */
333 char ps1[] = ">>> ";
334 char ps2[] = "... ";
335 char *prompt = ps1;
336 char *msg, *line, *code = NULL;
337 PyObject *src, *glb, *loc;
338 PyObject *exc, *val, *trb, *obj, *dum;
339
340 Py_Initialize ();
341 loc = PyDict_New ();
342 glb = PyDict_New ();
343 PyDict_SetItemString (glb, "__builtins__", PyEval_GetBuiltins ());
344
345 while (!done)
346 {
347 line = readline (prompt);
348
349 if (NULL == line) /* CTRL-D pressed */
350 {
351 done = 1;
352 }
353 else
354 {
355 i = strlen (line);
356
357 if (i > 0)
358 add_history (line); /* save non-empty lines */
359
360 if (NULL == code) /* nothing in code yet */
361 j = 0;
362 else
363 j = strlen (code);
364
365 code = realloc (code, i + j + 2);
366 if (NULL == code) /* out of memory */
367 exit (1);
368
369 if (0 == j) /* code was empty, so */
370 code[0] = '\0'; /* keep strncat happy */
371
372 strncat (code, line, i); /* append line to code */
373 code[i + j] = '\n'; /* append '\n' to code */
374 code[i + j + 1] = '\0';
375
376 src = Py_CompileString (code, "<stdin>", Py_single_input);
377
378 if (NULL != src) /* compiled just fine - */
379 {
380 if (ps1 == prompt || /* ">>> " or */
381 '\n' == code[i + j - 1]) /* "... " and double '\n' */
382 { /* so execute it */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000383 dum = PyEval_EvalCode (src, glb, loc);
Georg Brandld7413152009-10-11 21:25:26 +0000384 Py_XDECREF (dum);
385 Py_XDECREF (src);
386 free (code);
387 code = NULL;
388 if (PyErr_Occurred ())
389 PyErr_Print ();
390 prompt = ps1;
391 }
392 } /* syntax error or E_EOF? */
393 else if (PyErr_ExceptionMatches (PyExc_SyntaxError))
394 {
395 PyErr_Fetch (&exc, &val, &trb); /* clears exception! */
396
397 if (PyArg_ParseTuple (val, "sO", &msg, &obj) &&
398 !strcmp (msg, "unexpected EOF while parsing")) /* E_EOF */
399 {
400 Py_XDECREF (exc);
401 Py_XDECREF (val);
402 Py_XDECREF (trb);
403 prompt = ps2;
404 }
405 else /* some other syntax error */
406 {
407 PyErr_Restore (exc, val, trb);
408 PyErr_Print ();
409 free (code);
410 code = NULL;
411 prompt = ps1;
412 }
413 }
414 else /* some non-syntax error */
415 {
416 PyErr_Print ();
417 free (code);
418 code = NULL;
419 prompt = ps1;
420 }
421
422 free (line);
423 }
424 }
425
426 Py_XDECREF(glb);
427 Py_XDECREF(loc);
428 Py_Finalize();
429 exit(0);
430 }
431
432
433How do I find undefined g++ symbols __builtin_new or __pure_virtual?
434--------------------------------------------------------------------
435
436To dynamically load g++ extension modules, you must recompile Python, relink it
Ezio Melotti0639d5a2009-12-19 23:26:38 +0000437using g++ (change LINKCC in the Python Modules Makefile), and link your
Georg Brandld7413152009-10-11 21:25:26 +0000438extension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``).
439
440
441Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)?
442----------------------------------------------------------------------------------------------------------------
443
Georg Brandlc4a55fc2010-02-06 18:46:57 +0000444In Python 2.2, you can inherit from built-in classes such as :class:`int`,
Georg Brandld7413152009-10-11 21:25:26 +0000445:class:`list`, :class:`dict`, etc.
446
447The Boost Python Library (BPL, http://www.boost.org/libs/python/doc/index.html)
448provides a way of doing this from C++ (i.e. you can inherit from an extension
449class written in C++ using the BPL).
450
451
452When importing module X, why do I get "undefined symbol: PyUnicodeUCS2*"?
453-------------------------------------------------------------------------
454
455You are using a version of Python that uses a 4-byte representation for Unicode
456characters, but some C extension module you are importing was compiled using a
457Python that uses a 2-byte representation for Unicode characters (the default).
458
459If instead the name of the undefined symbol starts with ``PyUnicodeUCS4``, the
460problem is the reverse: Python was built using 2-byte Unicode characters, and
461the extension module was compiled using a Python with 4-byte Unicode characters.
462
463This can easily occur when using pre-built extension packages. RedHat Linux
4647.x, in particular, provided a "python2" binary that is compiled with 4-byte
465Unicode. This only causes the link failure if the extension uses any of the
466``PyUnicode_*()`` functions. It is also a problem if an extension uses any of
Georg Brandl60203b42010-10-06 10:11:56 +0000467the Unicode-related format specifiers for :c:func:`Py_BuildValue` (or similar) or
468parameter specifications for :c:func:`PyArg_ParseTuple`.
Georg Brandld7413152009-10-11 21:25:26 +0000469
470You can check the size of the Unicode character a Python interpreter is using by
471checking the value of sys.maxunicode:
472
473 >>> import sys
474 >>> if sys.maxunicode > 65535:
Georg Brandl62423cb2009-12-19 17:59:59 +0000475 ... print('UCS4 build')
Georg Brandld7413152009-10-11 21:25:26 +0000476 ... else:
Georg Brandl62423cb2009-12-19 17:59:59 +0000477 ... print('UCS2 build')
Georg Brandld7413152009-10-11 21:25:26 +0000478
479The only way to solve this problem is to use extension modules compiled with a
480Python binary built using the same size for Unicode characters.