blob: 3379e41d9de0724eb0a456c8c4fe8d060468c4f1 [file] [log] [blame]
Georg Brandld7413152009-10-11 21:25:26 +00001=======================
2Extending/Embedding FAQ
3=======================
4
Georg Brandl44ea77b2013-03-28 13:28:44 +01005.. only:: html
6
7 .. contents::
Georg Brandld7413152009-10-11 21:25:26 +00008
9.. highlight:: c
10
11
Georg Brandl62423cb2009-12-19 17:59:59 +000012.. XXX need review for Python 3.
13
14
Georg Brandld7413152009-10-11 21:25:26 +000015Can I create my own functions in C?
16-----------------------------------
17
18Yes, you can create built-in modules containing functions, variables, exceptions
19and even new types in C. This is explained in the document
20:ref:`extending-index`.
21
22Most intermediate or advanced Python books will also cover this topic.
23
24
25Can I create my own functions in C++?
26-------------------------------------
27
28Yes, using the C compatibility features found in C++. Place ``extern "C" {
29... }`` around the Python include files and put ``extern "C"`` before each
30function that is going to be called by the Python interpreter. Global or static
31C++ objects with constructors are probably not a good idea.
32
33
Georg Brandl4abda542010-07-12 09:00:29 +000034.. _c-wrapper-software:
35
Georg Brandld7413152009-10-11 21:25:26 +000036Writing C is hard; are there any alternatives?
37----------------------------------------------
38
39There are a number of alternatives to writing your own C extensions, depending
40on what you're trying to do.
41
Antoine Pitrou9cb41df2011-12-03 21:21:36 +010042.. XXX make sure these all work
Georg Brandld7413152009-10-11 21:25:26 +000043
Antoine Pitrou09264b62011-02-05 10:57:17 +000044`Cython <http://cython.org>`_ and its relative `Pyrex
Serhiy Storchaka6dff0202016-05-07 10:49:07 +030045<https://www.cosc.canterbury.ac.nz/greg.ewing/python/Pyrex/>`_ are compilers
Antoine Pitrou09264b62011-02-05 10:57:17 +000046that accept a slightly modified form of Python and generate the corresponding
47C code. Cython and Pyrex make it possible to write an extension without having
48to learn Python's C API.
Georg Brandld7413152009-10-11 21:25:26 +000049
50If you need to interface to some C or C++ library for which no Python extension
51currently exists, you can try wrapping the library's data types and functions
52with a tool such as `SWIG <http://www.swig.org>`_. `SIP
Georg Brandl5d941342016-02-26 19:37:12 +010053<https://riverbankcomputing.com/software/sip/intro>`__, `CXX
Georg Brandld7413152009-10-11 21:25:26 +000054<http://cxx.sourceforge.net/>`_ `Boost
55<http://www.boost.org/libs/python/doc/index.html>`_, or `Weave
jimmy4f29f3c2017-12-13 13:37:51 +010056<https://github.com/scipy/weave>`_ are also
Georg Brandl77fe77d2014-10-29 09:24:54 +010057alternatives for wrapping C++ libraries.
Georg Brandld7413152009-10-11 21:25:26 +000058
59
60How can I execute arbitrary Python statements from C?
61-----------------------------------------------------
62
Georg Brandl60203b42010-10-06 10:11:56 +000063The highest-level function to do this is :c:func:`PyRun_SimpleString` which takes
Georg Brandld7413152009-10-11 21:25:26 +000064a single string argument to be executed in the context of the module
Serhiy Storchaka5bb00052018-02-09 13:31:19 +020065``__main__`` and returns ``0`` for success and ``-1`` when an exception occurred
Stéphane Wirtele483f022018-10-26 12:52:11 +020066(including :exc:`SyntaxError`). If you want more control, use
Georg Brandl60203b42010-10-06 10:11:56 +000067:c:func:`PyRun_String`; see the source for :c:func:`PyRun_SimpleString` in
Georg Brandld7413152009-10-11 21:25:26 +000068``Python/pythonrun.c``.
69
70
71How can I evaluate an arbitrary Python expression from C?
72---------------------------------------------------------
73
Georg Brandl60203b42010-10-06 10:11:56 +000074Call the function :c:func:`PyRun_String` from the previous question with the
75start symbol :c:data:`Py_eval_input`; it parses an expression, evaluates it and
Georg Brandld7413152009-10-11 21:25:26 +000076returns its value.
77
78
79How do I extract C values from a Python object?
80-----------------------------------------------
81
Georg Brandl60203b42010-10-06 10:11:56 +000082That depends on the object's type. If it's a tuple, :c:func:`PyTuple_Size`
83returns its length and :c:func:`PyTuple_GetItem` returns the item at a specified
84index. Lists have similar functions, :c:func:`PyListSize` and
85:c:func:`PyList_GetItem`.
Georg Brandld7413152009-10-11 21:25:26 +000086
Gregory P. Smith4b52ae82013-03-22 13:43:30 -070087For bytes, :c:func:`PyBytes_Size` returns its length and
88:c:func:`PyBytes_AsStringAndSize` provides a pointer to its value and its
89length. Note that Python bytes objects may contain null bytes so C's
90:c:func:`strlen` should not be used.
Georg Brandld7413152009-10-11 21:25:26 +000091
Serhiy Storchaka25fc0882019-10-30 12:03:20 +020092To test the type of an object, first make sure it isn't ``NULL``, and then use
Gregory P. Smith4b52ae82013-03-22 13:43:30 -070093:c:func:`PyBytes_Check`, :c:func:`PyTuple_Check`, :c:func:`PyList_Check`, etc.
Georg Brandld7413152009-10-11 21:25:26 +000094
95There is also a high-level API to Python objects which is provided by the
96so-called 'abstract' interface -- read ``Include/abstract.h`` for further
97details. It allows interfacing with any kind of Python sequence using calls
Zachary Ware2f31b4b2014-03-20 10:16:09 -050098like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc. as well
99as many other useful protocols such as numbers (:c:func:`PyNumber_Index` et
Gregory P. Smith4b52ae82013-03-22 13:43:30 -0700100al.) and mappings in the PyMapping APIs.
Georg Brandld7413152009-10-11 21:25:26 +0000101
102
103How do I use Py_BuildValue() to create a tuple of arbitrary length?
104-------------------------------------------------------------------
105
Antoine Pitrou48383bf2011-12-03 22:30:19 +0100106You can't. Use :c:func:`PyTuple_Pack` instead.
Georg Brandld7413152009-10-11 21:25:26 +0000107
108
109How do I call an object's method from C?
110----------------------------------------
111
Georg Brandl60203b42010-10-06 10:11:56 +0000112The :c:func:`PyObject_CallMethod` function can be used to call an arbitrary
Georg Brandld7413152009-10-11 21:25:26 +0000113method of an object. The parameters are the object, the name of the method to
Georg Brandl60203b42010-10-06 10:11:56 +0000114call, a format string like that used with :c:func:`Py_BuildValue`, and the
Georg Brandld7413152009-10-11 21:25:26 +0000115argument values::
116
117 PyObject *
Serhiy Storchaka03863d22015-06-21 17:11:21 +0300118 PyObject_CallMethod(PyObject *object, const char *method_name,
119 const char *arg_format, ...);
Georg Brandld7413152009-10-11 21:25:26 +0000120
121This works for any object that has methods -- whether built-in or user-defined.
Georg Brandl60203b42010-10-06 10:11:56 +0000122You are responsible for eventually :c:func:`Py_DECREF`\ 'ing the return value.
Georg Brandld7413152009-10-11 21:25:26 +0000123
124To call, e.g., a file object's "seek" method with arguments 10, 0 (assuming the
125file object pointer is "f")::
126
127 res = PyObject_CallMethod(f, "seek", "(ii)", 10, 0);
128 if (res == NULL) {
129 ... an exception occurred ...
130 }
131 else {
132 Py_DECREF(res);
133 }
134
Georg Brandl60203b42010-10-06 10:11:56 +0000135Note that since :c:func:`PyObject_CallObject` *always* wants a tuple for the
Georg Brandld7413152009-10-11 21:25:26 +0000136argument list, to call a function without arguments, pass "()" for the format,
137and to call a function with one argument, surround the argument in parentheses,
138e.g. "(i)".
139
140
141How do I catch the output from PyErr_Print() (or anything that prints to stdout/stderr)?
142----------------------------------------------------------------------------------------
143
144In Python code, define an object that supports the ``write()`` method. Assign
145this object to :data:`sys.stdout` and :data:`sys.stderr`. Call print_error, or
146just allow the standard traceback mechanism to work. Then, the output will go
147wherever your ``write()`` method sends it.
148
Martin Panter1050d2d2016-07-26 11:18:21 +0200149The easiest way to do this is to use the :class:`io.StringIO` class:
150
151.. code-block:: pycon
Georg Brandld7413152009-10-11 21:25:26 +0000152
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100153 >>> import io, sys
154 >>> sys.stdout = io.StringIO()
155 >>> print('foo')
156 >>> print('hello world!')
157 >>> sys.stderr.write(sys.stdout.getvalue())
158 foo
159 hello world!
Georg Brandld7413152009-10-11 21:25:26 +0000160
Martin Panter1050d2d2016-07-26 11:18:21 +0200161A custom object to do the same would look like this:
162
163.. code-block:: pycon
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100164
165 >>> import io, sys
166 >>> class StdoutCatcher(io.TextIOBase):
Georg Brandld7413152009-10-11 21:25:26 +0000167 ... def __init__(self):
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100168 ... self.data = []
Georg Brandld7413152009-10-11 21:25:26 +0000169 ... def write(self, stuff):
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100170 ... self.data.append(stuff)
Georg Brandld7413152009-10-11 21:25:26 +0000171 ...
172 >>> import sys
173 >>> sys.stdout = StdoutCatcher()
Georg Brandl62423cb2009-12-19 17:59:59 +0000174 >>> print('foo')
175 >>> print('hello world!')
Antoine Pitroud4ddec52011-12-03 22:35:31 +0100176 >>> sys.stderr.write(''.join(sys.stdout.data))
Georg Brandld7413152009-10-11 21:25:26 +0000177 foo
178 hello world!
179
180
181How do I access a module written in Python from C?
182--------------------------------------------------
183
184You can get a pointer to the module object as follows::
185
186 module = PyImport_ImportModule("<modulename>");
187
188If the module hasn't been imported yet (i.e. it is not yet present in
189:data:`sys.modules`), this initializes the module; otherwise it simply returns
190the value of ``sys.modules["<modulename>"]``. Note that it doesn't enter the
191module into any namespace -- it only ensures it has been initialized and is
192stored in :data:`sys.modules`.
193
194You can then access the module's attributes (i.e. any name defined in the
195module) as follows::
196
197 attr = PyObject_GetAttrString(module, "<attrname>");
198
Georg Brandl60203b42010-10-06 10:11:56 +0000199Calling :c:func:`PyObject_SetAttrString` to assign to variables in the module
Georg Brandld7413152009-10-11 21:25:26 +0000200also works.
201
202
203How do I interface to C++ objects from Python?
204----------------------------------------------
205
206Depending on your requirements, there are many approaches. To do this manually,
207begin by reading :ref:`the "Extending and Embedding" document
208<extending-index>`. Realize that for the Python run-time system, there isn't a
209whole lot of difference between C and C++ -- so the strategy of building a new
210Python type around a C structure (pointer) type will also work for C++ objects.
211
Georg Brandl4abda542010-07-12 09:00:29 +0000212For C++ libraries, see :ref:`c-wrapper-software`.
Georg Brandld7413152009-10-11 21:25:26 +0000213
214
215I added a module using the Setup file and the make fails; why?
216--------------------------------------------------------------
217
218Setup must end in a newline, if there is no newline there, the build process
219fails. (Fixing this requires some ugly shell script hackery, and this bug is so
220minor that it doesn't seem worth the effort.)
221
222
223How do I debug an extension?
224----------------------------
225
226When using GDB with dynamically loaded extensions, you can't set a breakpoint in
227your extension until your extension is loaded.
228
Martin Panter1050d2d2016-07-26 11:18:21 +0200229In your ``.gdbinit`` file (or interactively), add the command:
230
231.. code-block:: none
Georg Brandld7413152009-10-11 21:25:26 +0000232
233 br _PyImport_LoadDynamicModule
234
Martin Panter1050d2d2016-07-26 11:18:21 +0200235Then, when you run GDB:
236
237.. code-block:: shell-session
Georg Brandld7413152009-10-11 21:25:26 +0000238
239 $ gdb /local/bin/python
240 gdb) run myscript.py
241 gdb) continue # repeat until your extension is loaded
242 gdb) finish # so that your extension is loaded
243 gdb) br myfunction.c:50
244 gdb) continue
245
246I want to compile a Python module on my Linux system, but some files are missing. Why?
247--------------------------------------------------------------------------------------
248
249Most packaged versions of Python don't include the
250:file:`/usr/lib/python2.{x}/config/` directory, which contains various files
251required for compiling Python extensions.
252
253For Red Hat, install the python-devel RPM to get the necessary files.
254
255For Debian, run ``apt-get install python-dev``.
256
257
Georg Brandld7413152009-10-11 21:25:26 +0000258How do I tell "incomplete input" from "invalid input"?
259------------------------------------------------------
260
261Sometimes you want to emulate the Python interactive interpreter's behavior,
262where it gives you a continuation prompt when the input is incomplete (e.g. you
263typed the start of an "if" statement or you didn't close your parentheses or
264triple string quotes), but it gives you a syntax error message immediately when
265the input is invalid.
266
267In Python you can use the :mod:`codeop` module, which approximates the parser's
268behavior sufficiently. IDLE uses this, for example.
269
Georg Brandl60203b42010-10-06 10:11:56 +0000270The easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` (perhaps
Georg Brandld7413152009-10-11 21:25:26 +0000271in a separate thread) and let the Python interpreter handle the input for
Georg Brandl60203b42010-10-06 10:11:56 +0000272you. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` to point at your
Georg Brandld7413152009-10-11 21:25:26 +0000273custom input function. See ``Modules/readline.c`` and ``Parser/myreadline.c``
274for more hints.
275
276However sometimes you have to run the embedded Python interpreter in the same
277thread as your rest application and you can't allow the
Miss Islington (bot)dc102642021-06-28 02:35:52 -0700278:c:func:`PyRun_InteractiveLoop` to stop while waiting for user input.
279A solution is trying to compile the received string with
Georg Brandl60203b42010-10-06 10:11:56 +0000280:c:func:`Py_CompileString`. If it compiles without errors, try to execute the
281returned code object by calling :c:func:`PyEval_EvalCode`. Otherwise save the
Georg Brandld7413152009-10-11 21:25:26 +0000282input for later. If the compilation fails, find out if it's an error or just
283more input is required - by extracting the message string from the exception
284tuple and comparing it to the string "unexpected EOF while parsing". Here is a
285complete example using the GNU readline library (you may want to ignore
286**SIGINT** while calling readline())::
287
288 #include <stdio.h>
289 #include <readline.h>
290
Inada Naokic88fece2019-04-13 10:46:21 +0900291 #define PY_SSIZE_T_CLEAN
Georg Brandld7413152009-10-11 21:25:26 +0000292 #include <Python.h>
293 #include <object.h>
294 #include <compile.h>
295 #include <eval.h>
296
297 int main (int argc, char* argv[])
298 {
299 int i, j, done = 0; /* lengths of line, code */
300 char ps1[] = ">>> ";
301 char ps2[] = "... ";
302 char *prompt = ps1;
303 char *msg, *line, *code = NULL;
304 PyObject *src, *glb, *loc;
305 PyObject *exc, *val, *trb, *obj, *dum;
306
307 Py_Initialize ();
308 loc = PyDict_New ();
309 glb = PyDict_New ();
310 PyDict_SetItemString (glb, "__builtins__", PyEval_GetBuiltins ());
311
312 while (!done)
313 {
314 line = readline (prompt);
315
Serhiy Storchaka0424eaf2015-09-12 17:45:25 +0300316 if (NULL == line) /* Ctrl-D pressed */
Georg Brandld7413152009-10-11 21:25:26 +0000317 {
318 done = 1;
319 }
320 else
321 {
322 i = strlen (line);
323
324 if (i > 0)
325 add_history (line); /* save non-empty lines */
326
327 if (NULL == code) /* nothing in code yet */
328 j = 0;
329 else
330 j = strlen (code);
331
332 code = realloc (code, i + j + 2);
333 if (NULL == code) /* out of memory */
334 exit (1);
335
336 if (0 == j) /* code was empty, so */
337 code[0] = '\0'; /* keep strncat happy */
338
339 strncat (code, line, i); /* append line to code */
340 code[i + j] = '\n'; /* append '\n' to code */
341 code[i + j + 1] = '\0';
342
343 src = Py_CompileString (code, "<stdin>", Py_single_input);
344
345 if (NULL != src) /* compiled just fine - */
346 {
347 if (ps1 == prompt || /* ">>> " or */
348 '\n' == code[i + j - 1]) /* "... " and double '\n' */
349 { /* so execute it */
Martin v. Löwis4d0d4712010-12-03 20:14:31 +0000350 dum = PyEval_EvalCode (src, glb, loc);
Georg Brandld7413152009-10-11 21:25:26 +0000351 Py_XDECREF (dum);
352 Py_XDECREF (src);
353 free (code);
354 code = NULL;
355 if (PyErr_Occurred ())
356 PyErr_Print ();
357 prompt = ps1;
358 }
359 } /* syntax error or E_EOF? */
360 else if (PyErr_ExceptionMatches (PyExc_SyntaxError))
361 {
362 PyErr_Fetch (&exc, &val, &trb); /* clears exception! */
363
364 if (PyArg_ParseTuple (val, "sO", &msg, &obj) &&
365 !strcmp (msg, "unexpected EOF while parsing")) /* E_EOF */
366 {
367 Py_XDECREF (exc);
368 Py_XDECREF (val);
369 Py_XDECREF (trb);
370 prompt = ps2;
371 }
372 else /* some other syntax error */
373 {
374 PyErr_Restore (exc, val, trb);
375 PyErr_Print ();
376 free (code);
377 code = NULL;
378 prompt = ps1;
379 }
380 }
381 else /* some non-syntax error */
382 {
383 PyErr_Print ();
384 free (code);
385 code = NULL;
386 prompt = ps1;
387 }
388
389 free (line);
390 }
391 }
392
393 Py_XDECREF(glb);
394 Py_XDECREF(loc);
395 Py_Finalize();
396 exit(0);
397 }
398
399
400How do I find undefined g++ symbols __builtin_new or __pure_virtual?
401--------------------------------------------------------------------
402
403To dynamically load g++ extension modules, you must recompile Python, relink it
Ezio Melotti0639d5a2009-12-19 23:26:38 +0000404using g++ (change LINKCC in the Python Modules Makefile), and link your
Georg Brandld7413152009-10-11 21:25:26 +0000405extension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``).
406
407
408Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)?
409----------------------------------------------------------------------------------------------------------------
410
Benjamin Peterson0071b3d2015-10-10 23:23:55 -0700411Yes, you can inherit from built-in classes such as :class:`int`, :class:`list`,
412:class:`dict`, etc.
Georg Brandld7413152009-10-11 21:25:26 +0000413
414The Boost Python Library (BPL, http://www.boost.org/libs/python/doc/index.html)
415provides a way of doing this from C++ (i.e. you can inherit from an extension
416class written in C++ using the BPL).