blob: fa8e6e77ed2da0a434caccdaadadb2cb0cdfe268 [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
40.. XXX make sure these all work; mention Cython
41
42If you need more speed, `Psyco <http://psyco.sourceforge.net/>`_ generates x86
43assembly code from Python bytecode. You can use Psyco to compile the most
44time-critical functions in your code, and gain a significant improvement with
45very little effort, as long as you're running on a machine with an
46x86-compatible processor.
47
Antoine Pitrou09264b62011-02-05 10:57:17 +000048`Cython <http://cython.org>`_ and its relative `Pyrex
49<http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/>`_ are compilers
50that accept a slightly modified form of Python and generate the corresponding
51C code. Cython and Pyrex make it possible to write an extension without having
52to learn Python's C API.
Georg Brandld7413152009-10-11 21:25:26 +000053
54If you need to interface to some C or C++ library for which no Python extension
55currently exists, you can try wrapping the library's data types and functions
56with a tool such as `SWIG <http://www.swig.org>`_. `SIP
Georg Brandl495f7b52009-10-27 15:28:25 +000057<http://www.riverbankcomputing.co.uk/software/sip/>`__, `CXX
Georg Brandld7413152009-10-11 21:25:26 +000058<http://cxx.sourceforge.net/>`_ `Boost
59<http://www.boost.org/libs/python/doc/index.html>`_, or `Weave
Ezio Melotti19192dd2010-04-05 13:25:51 +000060<http://www.scipy.org/Weave>`_ are also alternatives for wrapping
61C++ libraries.
Georg Brandld7413152009-10-11 21:25:26 +000062
63
64How can I execute arbitrary Python statements from C?
65-----------------------------------------------------
66
Georg Brandl60203b42010-10-06 10:11:56 +000067The highest-level function to do this is :c:func:`PyRun_SimpleString` which takes
Georg Brandld7413152009-10-11 21:25:26 +000068a single string argument to be executed in the context of the module
69``__main__`` and returns 0 for success and -1 when an exception occurred
70(including ``SyntaxError``). If you want more control, use
Georg Brandl60203b42010-10-06 10:11:56 +000071:c:func:`PyRun_String`; see the source for :c:func:`PyRun_SimpleString` in
Georg Brandld7413152009-10-11 21:25:26 +000072``Python/pythonrun.c``.
73
74
75How can I evaluate an arbitrary Python expression from C?
76---------------------------------------------------------
77
Georg Brandl60203b42010-10-06 10:11:56 +000078Call the function :c:func:`PyRun_String` from the previous question with the
79start symbol :c:data:`Py_eval_input`; it parses an expression, evaluates it and
Georg Brandld7413152009-10-11 21:25:26 +000080returns its value.
81
82
83How do I extract C values from a Python object?
84-----------------------------------------------
85
Georg Brandl60203b42010-10-06 10:11:56 +000086That depends on the object's type. If it's a tuple, :c:func:`PyTuple_Size`
87returns its length and :c:func:`PyTuple_GetItem` returns the item at a specified
88index. Lists have similar functions, :c:func:`PyListSize` and
89:c:func:`PyList_GetItem`.
Georg Brandld7413152009-10-11 21:25:26 +000090
Georg Brandl60203b42010-10-06 10:11:56 +000091For strings, :c:func:`PyString_Size` returns its length and
92:c:func:`PyString_AsString` a pointer to its value. Note that Python strings may
93contain null bytes so C's :c:func:`strlen` should not be used.
Georg Brandld7413152009-10-11 21:25:26 +000094
95To test the type of an object, first make sure it isn't *NULL*, and then use
Georg Brandl60203b42010-10-06 10:11:56 +000096:c:func:`PyString_Check`, :c:func:`PyTuple_Check`, :c:func:`PyList_Check`, etc.
Georg Brandld7413152009-10-11 21:25:26 +000097
98There is also a high-level API to Python objects which is provided by the
99so-called 'abstract' interface -- read ``Include/abstract.h`` for further
100details. It allows interfacing with any kind of Python sequence using calls
Georg Brandl60203b42010-10-06 10:11:56 +0000101like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc.) as well as
Georg Brandld7413152009-10-11 21:25:26 +0000102many other useful protocols.
103
104
105How do I use Py_BuildValue() to create a tuple of arbitrary length?
106-------------------------------------------------------------------
107
108You can't. Use ``t = PyTuple_New(n)`` instead, and fill it with objects using
109``PyTuple_SetItem(t, i, o)`` -- note that this "eats" a reference count of
Georg Brandl60203b42010-10-06 10:11:56 +0000110``o``, so you have to :c:func:`Py_INCREF` it. Lists have similar functions
Georg Brandld7413152009-10-11 21:25:26 +0000111``PyList_New(n)`` and ``PyList_SetItem(l, i, o)``. Note that you *must* set all
112the tuple items to some value before you pass the tuple to Python code --
113``PyTuple_New(n)`` initializes them to NULL, which isn't a valid Python value.
114
115
116How do I call an object's method from C?
117----------------------------------------
118
Georg Brandl60203b42010-10-06 10:11:56 +0000119The :c:func:`PyObject_CallMethod` function can be used to call an arbitrary
Georg Brandld7413152009-10-11 21:25:26 +0000120method of an object. The parameters are the object, the name of the method to
Georg Brandl60203b42010-10-06 10:11:56 +0000121call, a format string like that used with :c:func:`Py_BuildValue`, and the
Georg Brandld7413152009-10-11 21:25:26 +0000122argument values::
123
124 PyObject *
125 PyObject_CallMethod(PyObject *object, char *method_name,
126 char *arg_format, ...);
127
128This works for any object that has methods -- whether built-in or user-defined.
Georg Brandl60203b42010-10-06 10:11:56 +0000129You are responsible for eventually :c:func:`Py_DECREF`\ 'ing the return value.
Georg Brandld7413152009-10-11 21:25:26 +0000130
131To call, e.g., a file object's "seek" method with arguments 10, 0 (assuming the
132file object pointer is "f")::
133
134 res = PyObject_CallMethod(f, "seek", "(ii)", 10, 0);
135 if (res == NULL) {
136 ... an exception occurred ...
137 }
138 else {
139 Py_DECREF(res);
140 }
141
Georg Brandl60203b42010-10-06 10:11:56 +0000142Note that since :c:func:`PyObject_CallObject` *always* wants a tuple for the
Georg Brandld7413152009-10-11 21:25:26 +0000143argument list, to call a function without arguments, pass "()" for the format,
144and to call a function with one argument, surround the argument in parentheses,
145e.g. "(i)".
146
147
148How do I catch the output from PyErr_Print() (or anything that prints to stdout/stderr)?
149----------------------------------------------------------------------------------------
150
151In Python code, define an object that supports the ``write()`` method. Assign
152this object to :data:`sys.stdout` and :data:`sys.stderr`. Call print_error, or
153just allow the standard traceback mechanism to work. Then, the output will go
154wherever your ``write()`` method sends it.
155
156The easiest way to do this is to use the StringIO class in the standard library.
157
158Sample code and use for catching stdout:
159
160 >>> class StdoutCatcher:
161 ... def __init__(self):
162 ... self.data = ''
163 ... def write(self, stuff):
164 ... self.data = self.data + stuff
165 ...
166 >>> import sys
167 >>> sys.stdout = StdoutCatcher()
Georg Brandl62423cb2009-12-19 17:59:59 +0000168 >>> print('foo')
169 >>> print('hello world!')
Georg Brandld7413152009-10-11 21:25:26 +0000170 >>> sys.stderr.write(sys.stdout.data)
171 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.