blob: 676890e27c57ec503a04d79b2a191895482da098 [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
145The easiest way to do this is to use the StringIO class in the standard library.
146
147Sample code and use for catching stdout:
148
149 >>> class StdoutCatcher:
150 ... def __init__(self):
151 ... self.data = ''
152 ... def write(self, stuff):
153 ... self.data = self.data + stuff
154 ...
155 >>> import sys
156 >>> sys.stdout = StdoutCatcher()
Georg Brandl62423cb2009-12-19 17:59:59 +0000157 >>> print('foo')
158 >>> print('hello world!')
Georg Brandld7413152009-10-11 21:25:26 +0000159 >>> sys.stderr.write(sys.stdout.data)
160 foo
161 hello world!
162
163
164How do I access a module written in Python from C?
165--------------------------------------------------
166
167You can get a pointer to the module object as follows::
168
169 module = PyImport_ImportModule("<modulename>");
170
171If the module hasn't been imported yet (i.e. it is not yet present in
172:data:`sys.modules`), this initializes the module; otherwise it simply returns
173the value of ``sys.modules["<modulename>"]``. Note that it doesn't enter the
174module into any namespace -- it only ensures it has been initialized and is
175stored in :data:`sys.modules`.
176
177You can then access the module's attributes (i.e. any name defined in the
178module) as follows::
179
180 attr = PyObject_GetAttrString(module, "<attrname>");
181
Georg Brandl60203b42010-10-06 10:11:56 +0000182Calling :c:func:`PyObject_SetAttrString` to assign to variables in the module
Georg Brandld7413152009-10-11 21:25:26 +0000183also works.
184
185
186How do I interface to C++ objects from Python?
187----------------------------------------------
188
189Depending on your requirements, there are many approaches. To do this manually,
190begin by reading :ref:`the "Extending and Embedding" document
191<extending-index>`. Realize that for the Python run-time system, there isn't a
192whole lot of difference between C and C++ -- so the strategy of building a new
193Python type around a C structure (pointer) type will also work for C++ objects.
194
Georg Brandl4abda542010-07-12 09:00:29 +0000195For C++ libraries, see :ref:`c-wrapper-software`.
Georg Brandld7413152009-10-11 21:25:26 +0000196
197
198I added a module using the Setup file and the make fails; why?
199--------------------------------------------------------------
200
201Setup must end in a newline, if there is no newline there, the build process
202fails. (Fixing this requires some ugly shell script hackery, and this bug is so
203minor that it doesn't seem worth the effort.)
204
205
206How do I debug an extension?
207----------------------------
208
209When using GDB with dynamically loaded extensions, you can't set a breakpoint in
210your extension until your extension is loaded.
211
212In your ``.gdbinit`` file (or interactively), add the command::
213
214 br _PyImport_LoadDynamicModule
215
216Then, when you run GDB::
217
218 $ gdb /local/bin/python
219 gdb) run myscript.py
220 gdb) continue # repeat until your extension is loaded
221 gdb) finish # so that your extension is loaded
222 gdb) br myfunction.c:50
223 gdb) continue
224
225I want to compile a Python module on my Linux system, but some files are missing. Why?
226--------------------------------------------------------------------------------------
227
228Most packaged versions of Python don't include the
229:file:`/usr/lib/python2.{x}/config/` directory, which contains various files
230required for compiling Python extensions.
231
232For Red Hat, install the python-devel RPM to get the necessary files.
233
234For Debian, run ``apt-get install python-dev``.
235
236
237What does "SystemError: _PyImport_FixupExtension: module yourmodule not loaded" mean?
238-------------------------------------------------------------------------------------
239
240This means that you have created an extension module named "yourmodule", but
241your module init function does not initialize with that name.
242
243Every module init function will have a line similar to::
244
245 module = Py_InitModule("yourmodule", yourmodule_functions);
246
247If the string passed to this function is not the same name as your extension
248module, the :exc:`SystemError` exception will be raised.
249
250
251How do I tell "incomplete input" from "invalid input"?
252------------------------------------------------------
253
254Sometimes you want to emulate the Python interactive interpreter's behavior,
255where it gives you a continuation prompt when the input is incomplete (e.g. you
256typed the start of an "if" statement or you didn't close your parentheses or
257triple string quotes), but it gives you a syntax error message immediately when
258the input is invalid.
259
260In Python you can use the :mod:`codeop` module, which approximates the parser's
261behavior sufficiently. IDLE uses this, for example.
262
Georg Brandl60203b42010-10-06 10:11:56 +0000263The easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` (perhaps
Georg Brandld7413152009-10-11 21:25:26 +0000264in a separate thread) and let the Python interpreter handle the input for
Georg Brandl60203b42010-10-06 10:11:56 +0000265you. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` to point at your
Georg Brandld7413152009-10-11 21:25:26 +0000266custom input function. See ``Modules/readline.c`` and ``Parser/myreadline.c``
267for more hints.
268
269However sometimes you have to run the embedded Python interpreter in the same
270thread as your rest application and you can't allow the
Georg Brandl60203b42010-10-06 10:11:56 +0000271:c:func:`PyRun_InteractiveLoop` to stop while waiting for user input. The one
272solution then is to call :c:func:`PyParser_ParseString` and test for ``e.error``
Georg Brandld7413152009-10-11 21:25:26 +0000273equal to ``E_EOF``, which means the input is incomplete). Here's a sample code
274fragment, untested, inspired by code from Alex Farber::
275
276 #include <Python.h>
277 #include <node.h>
278 #include <errcode.h>
279 #include <grammar.h>
280 #include <parsetok.h>
281 #include <compile.h>
282
283 int testcomplete(char *code)
284 /* code should end in \n */
285 /* return -1 for error, 0 for incomplete, 1 for complete */
286 {
287 node *n;
288 perrdetail e;
289
290 n = PyParser_ParseString(code, &_PyParser_Grammar,
291 Py_file_input, &e);
292 if (n == NULL) {
293 if (e.error == E_EOF)
294 return 0;
295 return -1;
296 }
297
298 PyNode_Free(n);
299 return 1;
300 }
301
302Another solution is trying to compile the received string with
Georg Brandl60203b42010-10-06 10:11:56 +0000303:c:func:`Py_CompileString`. If it compiles without errors, try to execute the
304returned code object by calling :c:func:`PyEval_EvalCode`. Otherwise save the
Georg Brandld7413152009-10-11 21:25:26 +0000305input for later. If the compilation fails, find out if it's an error or just
306more input is required - by extracting the message string from the exception
307tuple and comparing it to the string "unexpected EOF while parsing". Here is a
308complete example using the GNU readline library (you may want to ignore
309**SIGINT** while calling readline())::
310
311 #include <stdio.h>
312 #include <readline.h>
313
314 #include <Python.h>
315 #include <object.h>
316 #include <compile.h>
317 #include <eval.h>
318
319 int main (int argc, char* argv[])
320 {
321 int i, j, done = 0; /* lengths of line, code */
322 char ps1[] = ">>> ";
323 char ps2[] = "... ";
324 char *prompt = ps1;
325 char *msg, *line, *code = NULL;
326 PyObject *src, *glb, *loc;
327 PyObject *exc, *val, *trb, *obj, *dum;
328
329 Py_Initialize ();
330 loc = PyDict_New ();
331 glb = PyDict_New ();
332 PyDict_SetItemString (glb, "__builtins__", PyEval_GetBuiltins ());
333
334 while (!done)
335 {
336 line = readline (prompt);
337
338 if (NULL == line) /* CTRL-D pressed */
339 {
340 done = 1;
341 }
342 else
343 {
344 i = strlen (line);
345
346 if (i > 0)
347 add_history (line); /* save non-empty lines */
348
349 if (NULL == code) /* nothing in code yet */
350 j = 0;
351 else
352 j = strlen (code);
353
354 code = realloc (code, i + j + 2);
355 if (NULL == code) /* out of memory */
356 exit (1);
357
358 if (0 == j) /* code was empty, so */
359 code[0] = '\0'; /* keep strncat happy */
360
361 strncat (code, line, i); /* append line to code */
362 code[i + j] = '\n'; /* append '\n' to code */
363 code[i + j + 1] = '\0';
364
365 src = Py_CompileString (code, "<stdin>", Py_single_input);
366
367 if (NULL != src) /* compiled just fine - */
368 {
369 if (ps1 == prompt || /* ">>> " or */
370 '\n' == code[i + j - 1]) /* "... " and double '\n' */
371 { /* so execute it */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000372 dum = PyEval_EvalCode (src, glb, loc);
Georg Brandld7413152009-10-11 21:25:26 +0000373 Py_XDECREF (dum);
374 Py_XDECREF (src);
375 free (code);
376 code = NULL;
377 if (PyErr_Occurred ())
378 PyErr_Print ();
379 prompt = ps1;
380 }
381 } /* syntax error or E_EOF? */
382 else if (PyErr_ExceptionMatches (PyExc_SyntaxError))
383 {
384 PyErr_Fetch (&exc, &val, &trb); /* clears exception! */
385
386 if (PyArg_ParseTuple (val, "sO", &msg, &obj) &&
387 !strcmp (msg, "unexpected EOF while parsing")) /* E_EOF */
388 {
389 Py_XDECREF (exc);
390 Py_XDECREF (val);
391 Py_XDECREF (trb);
392 prompt = ps2;
393 }
394 else /* some other syntax error */
395 {
396 PyErr_Restore (exc, val, trb);
397 PyErr_Print ();
398 free (code);
399 code = NULL;
400 prompt = ps1;
401 }
402 }
403 else /* some non-syntax error */
404 {
405 PyErr_Print ();
406 free (code);
407 code = NULL;
408 prompt = ps1;
409 }
410
411 free (line);
412 }
413 }
414
415 Py_XDECREF(glb);
416 Py_XDECREF(loc);
417 Py_Finalize();
418 exit(0);
419 }
420
421
422How do I find undefined g++ symbols __builtin_new or __pure_virtual?
423--------------------------------------------------------------------
424
425To dynamically load g++ extension modules, you must recompile Python, relink it
Ezio Melotti0639d5a2009-12-19 23:26:38 +0000426using g++ (change LINKCC in the Python Modules Makefile), and link your
Georg Brandld7413152009-10-11 21:25:26 +0000427extension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``).
428
429
430Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)?
431----------------------------------------------------------------------------------------------------------------
432
Georg Brandlc4a55fc2010-02-06 18:46:57 +0000433In Python 2.2, you can inherit from built-in classes such as :class:`int`,
Georg Brandld7413152009-10-11 21:25:26 +0000434:class:`list`, :class:`dict`, etc.
435
436The Boost Python Library (BPL, http://www.boost.org/libs/python/doc/index.html)
437provides a way of doing this from C++ (i.e. you can inherit from an extension
438class written in C++ using the BPL).
439
440
441When importing module X, why do I get "undefined symbol: PyUnicodeUCS2*"?
442-------------------------------------------------------------------------
443
444You are using a version of Python that uses a 4-byte representation for Unicode
445characters, but some C extension module you are importing was compiled using a
446Python that uses a 2-byte representation for Unicode characters (the default).
447
448If instead the name of the undefined symbol starts with ``PyUnicodeUCS4``, the
449problem is the reverse: Python was built using 2-byte Unicode characters, and
450the extension module was compiled using a Python with 4-byte Unicode characters.
451
452This can easily occur when using pre-built extension packages. RedHat Linux
4537.x, in particular, provided a "python2" binary that is compiled with 4-byte
454Unicode. This only causes the link failure if the extension uses any of the
455``PyUnicode_*()`` functions. It is also a problem if an extension uses any of
Georg Brandl60203b42010-10-06 10:11:56 +0000456the Unicode-related format specifiers for :c:func:`Py_BuildValue` (or similar) or
457parameter specifications for :c:func:`PyArg_ParseTuple`.
Georg Brandld7413152009-10-11 21:25:26 +0000458
459You can check the size of the Unicode character a Python interpreter is using by
460checking the value of sys.maxunicode:
461
462 >>> import sys
463 >>> if sys.maxunicode > 65535:
Georg Brandl62423cb2009-12-19 17:59:59 +0000464 ... print('UCS4 build')
Georg Brandld7413152009-10-11 21:25:26 +0000465 ... else:
Georg Brandl62423cb2009-12-19 17:59:59 +0000466 ... print('UCS2 build')
Georg Brandld7413152009-10-11 21:25:26 +0000467
468The only way to solve this problem is to use extension modules compiled with a
469Python binary built using the same size for Unicode characters.