1=======================
2Extending/Embedding FAQ
3=======================
4
5.. only:: html
6
7   .. contents::
8
9.. highlight:: c
10
11
12.. XXX need review for Python 3.
13
14
15Can 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
34.. _c-wrapper-software:
35
36Writing 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
42.. XXX make sure these all work
43
44`Cython <https://cython.org>`_ and its relative `Pyrex
45<https://www.csse.canterbury.ac.nz/greg.ewing/python/Pyrex/>`_ are compilers
46that 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.
49
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 <https://www.swig.org>`_.  `SIP
53<https://riverbankcomputing.com/software/sip/intro>`__, `CXX
54<https://cxx.sourceforge.net/>`_ `Boost
55<https://www.boost.org/libs/python/doc/index.html>`_, or `Weave
56<https://github.com/scipy/weave>`_ are also
57alternatives for wrapping C++ libraries.
58
59
60How can I execute arbitrary Python statements from C?
61-----------------------------------------------------
62
63The highest-level function to do this is :c:func:`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 :exc:`SyntaxError`).  If you want more control, use
67:c:func:`PyRun_String`; see the source for :c:func:`PyRun_SimpleString` in
68``Python/pythonrun.c``.
69
70
71How can I evaluate an arbitrary Python expression from C?
72---------------------------------------------------------
73
74Call 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
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, :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`.
86
87For 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.
91
92To test the type of an object, first make sure it isn't ``NULL``, and then use
93:c:func:`PyBytes_Check`, :c:func:`PyTuple_Check`, :c:func:`PyList_Check`, etc.
94
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
98like :c:func:`PySequence_Length`, :c:func:`PySequence_GetItem`, etc. as well
99as many other useful protocols such as numbers (:c:func:`PyNumber_Index` et
100al.) and mappings in the PyMapping APIs.
101
102
103How do I use Py_BuildValue() to create a tuple of arbitrary length?
104-------------------------------------------------------------------
105
106You can't.  Use :c:func:`PyTuple_Pack` instead.
107
108
109How do I call an object's method from C?
110----------------------------------------
111
112The :c:func:`PyObject_CallMethod` function can be used to call an arbitrary
113method of an object.  The parameters are the object, the name of the method to
114call, a format string like that used with :c:func:`Py_BuildValue`, and the
115argument values::
116
117   PyObject *
118   PyObject_CallMethod(PyObject *object, const char *method_name,
119                       const char *arg_format, ...);
120
121This works for any object that has methods -- whether built-in or user-defined.
122You are responsible for eventually :c:func:`Py_DECREF`\ 'ing the return value.
123
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
135Note that since :c:func:`PyObject_CallObject` *always* wants a tuple for the
136argument 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
149The easiest way to do this is to use the :class:`io.StringIO` class:
150
151.. code-block:: pycon
152
153   >>> 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!
160
161A custom object to do the same would look like this:
162
163.. code-block:: pycon
164
165   >>> import io, sys
166   >>> class StdoutCatcher(io.TextIOBase):
167   ...     def __init__(self):
168   ...         self.data = []
169   ...     def write(self, stuff):
170   ...         self.data.append(stuff)
171   ...
172   >>> import sys
173   >>> sys.stdout = StdoutCatcher()
174   >>> print('foo')
175   >>> print('hello world!')
176   >>> sys.stderr.write(''.join(sys.stdout.data))
177   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
199Calling :c:func:`PyObject_SetAttrString` to assign to variables in the module
200also 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
212For C++ libraries, see :ref:`c-wrapper-software`.
213
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
229In your ``.gdbinit`` file (or interactively), add the command:
230
231.. code-block:: none
232
233   br _PyImport_LoadDynamicModule
234
235Then, when you run GDB:
236
237.. code-block:: shell-session
238
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
257How do I tell "incomplete input" from "invalid input"?
258------------------------------------------------------
259
260Sometimes you want to emulate the Python interactive interpreter's behavior,
261where it gives you a continuation prompt when the input is incomplete (e.g. you
262typed the start of an "if" statement or you didn't close your parentheses or
263triple string quotes), but it gives you a syntax error message immediately when
264the input is invalid.
265
266In Python you can use the :mod:`codeop` module, which approximates the parser's
267behavior sufficiently.  IDLE uses this, for example.
268
269The easiest way to do it in C is to call :c:func:`PyRun_InteractiveLoop` (perhaps
270in a separate thread) and let the Python interpreter handle the input for
271you. You can also set the :c:func:`PyOS_ReadlineFunctionPointer` to point at your
272custom input function. See ``Modules/readline.c`` and ``Parser/myreadline.c``
273for more hints.
274
275How do I find undefined g++ symbols __builtin_new or __pure_virtual?
276--------------------------------------------------------------------
277
278To dynamically load g++ extension modules, you must recompile Python, relink it
279using g++ (change LINKCC in the Python Modules Makefile), and link your
280extension module using g++ (e.g., ``g++ -shared -o mymodule.so mymodule.o``).
281
282
283Can I create an object class with some methods implemented in C and others in Python (e.g. through inheritance)?
284----------------------------------------------------------------------------------------------------------------
285
286Yes, you can inherit from built-in classes such as :class:`int`, :class:`list`,
287:class:`dict`, etc.
288
289The Boost Python Library (BPL, https://www.boost.org/libs/python/doc/index.html)
290provides a way of doing this from C++ (i.e. you can inherit from an extension
291class written in C++ using the BPL).
292