blob: 7f0c16e4ded5ec6a544e6f94b9641e040e5fa75b [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
32Writing C is hard; are there any alternatives?
33----------------------------------------------
34
35There are a number of alternatives to writing your own C extensions, depending
36on what you're trying to do.
37
38.. XXX make sure these all work; mention Cython
39
40If you need more speed, `Psyco <http://psyco.sourceforge.net/>`_ generates x86
41assembly code from Python bytecode. You can use Psyco to compile the most
42time-critical functions in your code, and gain a significant improvement with
43very little effort, as long as you're running on a machine with an
44x86-compatible processor.
45
46`Pyrex <http://www.cosc.canterbury.ac.nz/~greg/python/Pyrex/>`_ is a compiler
47that accepts a slightly modified form of Python and generates the corresponding
48C code. Pyrex makes it possible to write an extension without having to learn
49Python's C API.
50
51If you need to interface to some C or C++ library for which no Python extension
52currently exists, you can try wrapping the library's data types and functions
53with a tool such as `SWIG <http://www.swig.org>`_. `SIP
Georg Brandl495f7b52009-10-27 15:28:25 +000054<http://www.riverbankcomputing.co.uk/software/sip/>`__, `CXX
Georg Brandld7413152009-10-11 21:25:26 +000055<http://cxx.sourceforge.net/>`_ `Boost
56<http://www.boost.org/libs/python/doc/index.html>`_, or `Weave
Georg Brandl62423cb2009-12-19 17:59:59 +000057<http://www.scipy.org/Weave>`_ are also alternatives for wrapping C++ libraries.
Georg Brandld7413152009-10-11 21:25:26 +000058
59
60How can I execute arbitrary Python statements from C?
61-----------------------------------------------------
62
63The highest-level function to do this is :cfunc:`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 ``SyntaxError``). If you want more control, use
67:cfunc:`PyRun_String`; see the source for :cfunc:`PyRun_SimpleString` in
68``Python/pythonrun.c``.
69
70
71How can I evaluate an arbitrary Python expression from C?
72---------------------------------------------------------
73
74Call the function :cfunc:`PyRun_String` from the previous question with the
75start symbol :cdata:`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, :cfunc:`PyTuple_Size`
83returns its length and :cfunc:`PyTuple_GetItem` returns the item at a specified
84index. Lists have similar functions, :cfunc:`PyListSize` and
85:cfunc:`PyList_GetItem`.
86
87For strings, :cfunc:`PyString_Size` returns its length and
88:cfunc:`PyString_AsString` a pointer to its value. Note that Python strings may
89contain null bytes so C's :cfunc:`strlen` should not be used.
90
91To test the type of an object, first make sure it isn't *NULL*, and then use
92:cfunc:`PyString_Check`, :cfunc:`PyTuple_Check`, :cfunc:`PyList_Check`, etc.
93
94There is also a high-level API to Python objects which is provided by the
95so-called 'abstract' interface -- read ``Include/abstract.h`` for further
96details. It allows interfacing with any kind of Python sequence using calls
97like :cfunc:`PySequence_Length`, :cfunc:`PySequence_GetItem`, etc.) as well as
98many other useful protocols.
99
100
101How do I use Py_BuildValue() to create a tuple of arbitrary length?
102-------------------------------------------------------------------
103
104You can't. Use ``t = PyTuple_New(n)`` instead, and fill it with objects using
105``PyTuple_SetItem(t, i, o)`` -- note that this "eats" a reference count of
106``o``, so you have to :cfunc:`Py_INCREF` it. Lists have similar functions
107``PyList_New(n)`` and ``PyList_SetItem(l, i, o)``. Note that you *must* set all
108the tuple items to some value before you pass the tuple to Python code --
109``PyTuple_New(n)`` initializes them to NULL, which isn't a valid Python value.
110
111
112How do I call an object's method from C?
113----------------------------------------
114
115The :cfunc:`PyObject_CallMethod` function can be used to call an arbitrary
116method of an object. The parameters are the object, the name of the method to
117call, a format string like that used with :cfunc:`Py_BuildValue`, and the
118argument values::
119
120 PyObject *
121 PyObject_CallMethod(PyObject *object, char *method_name,
122 char *arg_format, ...);
123
124This works for any object that has methods -- whether built-in or user-defined.
125You are responsible for eventually :cfunc:`Py_DECREF`\ 'ing the return value.
126
127To call, e.g., a file object's "seek" method with arguments 10, 0 (assuming the
128file object pointer is "f")::
129
130 res = PyObject_CallMethod(f, "seek", "(ii)", 10, 0);
131 if (res == NULL) {
132 ... an exception occurred ...
133 }
134 else {
135 Py_DECREF(res);
136 }
137
138Note that since :cfunc:`PyObject_CallObject` *always* wants a tuple for the
139argument list, to call a function without arguments, pass "()" for the format,
140and to call a function with one argument, surround the argument in parentheses,
141e.g. "(i)".
142
143
144How do I catch the output from PyErr_Print() (or anything that prints to stdout/stderr)?
145----------------------------------------------------------------------------------------
146
147In Python code, define an object that supports the ``write()`` method. Assign
148this object to :data:`sys.stdout` and :data:`sys.stderr`. Call print_error, or
149just allow the standard traceback mechanism to work. Then, the output will go
150wherever your ``write()`` method sends it.
151
152The easiest way to do this is to use the StringIO class in the standard library.
153
154Sample code and use for catching stdout:
155
156 >>> class StdoutCatcher:
157 ... def __init__(self):
158 ... self.data = ''
159 ... def write(self, stuff):
160 ... self.data = self.data + stuff
161 ...
162 >>> import sys
163 >>> sys.stdout = StdoutCatcher()
Georg Brandl62423cb2009-12-19 17:59:59 +0000164 >>> print('foo')
165 >>> print('hello world!')
Georg Brandld7413152009-10-11 21:25:26 +0000166 >>> sys.stderr.write(sys.stdout.data)
167 foo
168 hello world!
169
170
171How do I access a module written in Python from C?
172--------------------------------------------------
173
174You can get a pointer to the module object as follows::
175
176 module = PyImport_ImportModule("<modulename>");
177
178If the module hasn't been imported yet (i.e. it is not yet present in
179:data:`sys.modules`), this initializes the module; otherwise it simply returns
180the value of ``sys.modules["<modulename>"]``. Note that it doesn't enter the
181module into any namespace -- it only ensures it has been initialized and is
182stored in :data:`sys.modules`.
183
184You can then access the module's attributes (i.e. any name defined in the
185module) as follows::
186
187 attr = PyObject_GetAttrString(module, "<attrname>");
188
189Calling :cfunc:`PyObject_SetAttrString` to assign to variables in the module
190also works.
191
192
193How do I interface to C++ objects from Python?
194----------------------------------------------
195
196Depending on your requirements, there are many approaches. To do this manually,
197begin by reading :ref:`the "Extending and Embedding" document
198<extending-index>`. Realize that for the Python run-time system, there isn't a
199whole lot of difference between C and C++ -- so the strategy of building a new
200Python type around a C structure (pointer) type will also work for C++ objects.
201
202For C++ libraries, you can look at `SIP
203<http://www.riverbankcomputing.co.uk/sip/>`_, `CXX
204<http://cxx.sourceforge.net/>`_, `Boost
205<http://www.boost.org/libs/python/doc/index.html>`_, `Weave
Georg Brandl62423cb2009-12-19 17:59:59 +0000206<http://www.scipy.org/Weave>`_ or `SWIG <http://www.swig.org>`_
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
274The easiest way to do it in C is to call :cfunc:`PyRun_InteractiveLoop` (perhaps
275in a separate thread) and let the Python interpreter handle the input for
276you. You can also set the :cfunc:`PyOS_ReadlineFunctionPointer` to point at your
277custom 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
282:cfunc:`PyRun_InteractiveLoop` to stop while waiting for user input. The one
283solution then is to call :cfunc:`PyParser_ParseString` and test for ``e.error``
284equal 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
314:cfunc:`Py_CompileString`. If it compiles without errors, try to execute the
315returned code object by calling :cfunc:`PyEval_EvalCode`. Otherwise save the
316input 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 */
383 dum = PyEval_EvalCode ((PyCodeObject *)src, glb, loc);
384 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
467the Unicode-related format specifiers for :cfunc:`Py_BuildValue` (or similar) or
468parameter specifications for :cfunc:`PyArg_ParseTuple`.
469
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.