blob: 3510e18bc0f3c11b268977f9c6db0afe698ea02e [file] [log] [blame]
Fred Drakecc8f44b2001-08-20 19:30:29 +00001\chapter{Embedding Python in Another Application
2 \label{embedding}}
3
4The previous chapters discussed how to extend Python, that is, how to
5extend the functionality of Python by attaching a library of C
6functions to it. It is also possible to do it the other way around:
7enrich your C/\Cpp{} application by embedding Python in it. Embedding
8provides your application with the ability to implement some of the
9functionality of your application in Python rather than C or \Cpp.
10This can be used for many purposes; one example would be to allow
11users to tailor the application to their needs by writing some scripts
12in Python. You can also use it yourself if some of the functionality
13can be written in Python more easily.
14
15Embedding Python is similar to extending it, but not quite. The
16difference is that when you extend Python, the main program of the
17application is still the Python interpreter, while if you embed
18Python, the main program may have nothing to do with Python ---
19instead, some parts of the application occasionally call the Python
20interpreter to run some Python code.
21
22So if you are embedding Python, you are providing your own main
23program. One of the things this main program has to do is initialize
24the Python interpreter. At the very least, you have to call the
25function \cfunction{Py_Initialize()} (on Mac OS, call
26\cfunction{PyMac_Initialize()} instead). There are optional calls to
27pass command line arguments to Python. Then later you can call the
28interpreter from any part of the application.
29
30There are several different ways to call the interpreter: you can pass
31a string containing Python statements to
32\cfunction{PyRun_SimpleString()}, or you can pass a stdio file pointer
33and a file name (for identification in error messages only) to
34\cfunction{PyRun_SimpleFile()}. You can also call the lower-level
35operations described in the previous chapters to construct and use
36Python objects.
37
38A simple demo of embedding Python can be found in the directory
39\file{Demo/embed/} of the source distribution.
40
41
42\begin{seealso}
43 \seetitle[../api/api.html]{Python/C API Reference Manual}{The
44 details of Python's C interface are given in this manual.
45 A great deal of necessary information can be found here.}
46\end{seealso}
47
48
49\section{Very High Level Embedding
50 \label{high-level-embedding}}
51
52The simplest form of embedding Python is the use of the very
53high level interface. This interface is intended to execute a
54Python script without needing to interact with the application
55directly. This can for example be used to perform some operation
56on a file.
57
58\begin{verbatim}
59#include <Python.h>
60
Fred Drakeadaca022001-09-06 16:17:24 +000061int
62main(int argc, char *argv[])
Fred Drakecc8f44b2001-08-20 19:30:29 +000063{
64 Py_Initialize();
65 PyRun_SimpleString("from time import time,ctime\n"
66 "print 'Today is',ctime(time())\n");
67 Py_Finalize();
68 return 0;
69}
70\end{verbatim}
71
72The above code first initializes the Python interpreter with
73\cfunction{Py_Initialize()}, followed by the execution of a hard-coded
74Python script that print the date and time. Afterwards, the
75\cfunction{Py_Finalize()} call shuts the interpreter down, followed by
76the end of the program. In a real program, you may want to get the
77Python script from another source, perhaps a text-editor routine, a
78file, or a database. Getting the Python code from a file can better
79be done by using the \cfunction{PyRun_SimpleFile()} function, which
80saves you the trouble of allocating memory space and loading the file
81contents.
82
83
84\section{Beyond Very High Level Embedding: An overview
85 \label{lower-level-embedding}}
86
87The high level interface gives you the ability to execute
88arbitrary pieces of Python code from your application, but
89exchanging data values is quite cumbersome to say the least. If
90you want that, you should use lower level calls. At the cost of
91having to write more C code, you can achieve almost anything.
92
93It should be noted that extending Python and embedding Python
94is quite the same activity, despite the different intent. Most
95topics discussed in the previous chapters are still valid. To
96show this, consider what the extension code from Python to C
97really does:
98
99\begin{enumerate}
100 \item Convert data values from Python to C,
101 \item Perform a function call to a C routine using the
102 converted values, and
103 \item Convert the data values from the call from C to Python.
104\end{enumerate}
105
106When embedding Python, the interface code does:
107
108\begin{enumerate}
109 \item Convert data values from C to Python,
110 \item Perform a function call to a Python interface routine
111 using the converted values, and
112 \item Convert the data values from the call from Python to C.
113\end{enumerate}
114
115As you can see, the data conversion steps are simply swapped to
116accomodate the different direction of the cross-language transfer.
117The only difference is the routine that you call between both
118data conversions. When extending, you call a C routine, when
119embedding, you call a Python routine.
120
121This chapter will not discuss how to convert data from Python
122to C and vice versa. Also, proper use of references and dealing
123with errors is assumed to be understood. Since these aspects do not
124differ from extending the interpreter, you can refer to earlier
125chapters for the required information.
126
127
128\section{Pure Embedding
129 \label{pure-embedding}}
130
131The first program aims to execute a function in a Python
132script. Like in the section about the very high level interface,
133the Python interpreter does not directly interact with the
134application (but that will change in th next section).
135
136The code to run a function defined in a Python script is:
137
138\verbatiminput{run-func.c}
139
140This code loads a Python script using \code{argv[1]}, and calls the
141function named in \code{argv[2]}. Its integer arguments are the other
142values of the \code{argv} array. If you compile and link this
143program (let's call the finished executable \program{call}), and use
144it to execute a Python script, such as:
145
146\begin{verbatim}
147def multiply(a,b):
Greg Ward373198e2002-08-22 19:15:35 +0000148 print "Will compute", a, "times", b
Fred Drakecc8f44b2001-08-20 19:30:29 +0000149 c = 0
150 for i in range(0, a):
151 c = c + b
152 return c
153\end{verbatim}
154
155then the result should be:
156
157\begin{verbatim}
158$ call multiply 3 2
Greg Ward373198e2002-08-22 19:15:35 +0000159Will compute 3 times 2
Fred Drakecc8f44b2001-08-20 19:30:29 +0000160Result of call: 6
161\end{verbatim} % $
162
163Although the program is quite large for its functionality, most of the
164code is for data conversion between Python and C, and for error
165reporting. The interesting part with respect to embedding Python
166starts with
167
168\begin{verbatim}
169 Py_Initialize();
170 pName = PyString_FromString(argv[1]);
171 /* Error checking of pName left out */
172 pModule = PyImport_Import(pName);
173\end{verbatim}
174
175After initializing the interpreter, the script is loaded using
176\cfunction{PyImport_Import()}. This routine needs a Python string
177as its argument, which is constructed using the
178\cfunction{PyString_FromString()} data conversion routine.
179
180\begin{verbatim}
Fred Drakee77e5ef2002-04-12 19:04:17 +0000181 pFunc = PyObject_GetAttrString(pModule, argv[2]);
182 /* pFunc is a new reference */
Fred Drakecc8f44b2001-08-20 19:30:29 +0000183
184 if (pFunc && PyCallable_Check(pFunc)) {
185 ...
186 }
Fred Drakee77e5ef2002-04-12 19:04:17 +0000187 Py_XDECREF(pFunc);
Fred Drakecc8f44b2001-08-20 19:30:29 +0000188\end{verbatim}
189
Fred Drakee77e5ef2002-04-12 19:04:17 +0000190Once the script is loaded, the name we're looking for is retrieved
191using \cfunction{PyObject_GetAttrString()}. If the name exists, and
Greg Ward6f45eeb2002-06-21 12:33:08 +0000192the object returned is callable, you can safely assume that it is a
Fred Drakee77e5ef2002-04-12 19:04:17 +0000193function. The program then proceeds by constructing a tuple of
194arguments as normal. The call to the Python function is then made
195with:
Fred Drakecc8f44b2001-08-20 19:30:29 +0000196
197\begin{verbatim}
198 pValue = PyObject_CallObject(pFunc, pArgs);
199\end{verbatim}
200
201Upon return of the function, \code{pValue} is either \NULL{} or it
202contains a reference to the return value of the function. Be sure to
203release the reference after examining the value.
204
205
206\section{Extending Embedded Python
207 \label{extending-with-embedding}}
208
209Until now, the embedded Python interpreter had no access to
210functionality from the application itself. The Python API allows this
211by extending the embedded interpreter. That is, the embedded
212interpreter gets extended with routines provided by the application.
213While it sounds complex, it is not so bad. Simply forget for a while
214that the application starts the Python interpreter. Instead, consider
215the application to be a set of subroutines, and write some glue code
216that gives Python access to those routines, just like you would write
217a normal Python extension. For example:
218
219\begin{verbatim}
220static int numargs=0;
221
222/* Return the number of arguments of the application command line */
223static PyObject*
224emb_numargs(PyObject *self, PyObject *args)
225{
226 if(!PyArg_ParseTuple(args, ":numargs"))
227 return NULL;
228 return Py_BuildValue("i", numargs);
229}
230
Fred Drakeef6373a2001-11-17 06:50:42 +0000231static PyMethodDef EmbMethods[] = {
232 {"numargs", emb_numargs, METH_VARARGS,
233 "Return the number of arguments received by the process."},
234 {NULL, NULL, 0, NULL}
Fred Drakecc8f44b2001-08-20 19:30:29 +0000235};
236\end{verbatim}
237
238Insert the above code just above the \cfunction{main()} function.
239Also, insert the following two statements directly after
240\cfunction{Py_Initialize()}:
241
242\begin{verbatim}
243 numargs = argc;
244 Py_InitModule("emb", EmbMethods);
245\end{verbatim}
246
247These two lines initialize the \code{numargs} variable, and make the
248\function{emb.numargs()} function accessible to the embedded Python
249interpreter. With these extensions, the Python script can do things
250like
251
252\begin{verbatim}
253import emb
254print "Number of arguments", emb.numargs()
255\end{verbatim}
256
257In a real application, the methods will expose an API of the
258application to Python.
259
260
261%\section{For the future}
262%
263%You don't happen to have a nice library to get textual
264%equivalents of numeric values do you :-) ?
265%Callbacks here ? (I may be using information from that section
266%?!)
267%threads
268%code examples do not really behave well if errors happen
269% (what to watch out for)
270
271
Fred Drakec37b65e2001-11-28 07:26:15 +0000272\section{Embedding Python in \Cpp
Fred Drakecc8f44b2001-08-20 19:30:29 +0000273 \label{embeddingInCplusplus}}
274
275It is also possible to embed Python in a \Cpp{} program; precisely how this
276is done will depend on the details of the \Cpp{} system used; in general you
Fred Drakec37b65e2001-11-28 07:26:15 +0000277will need to write the main program in \Cpp, and use the \Cpp{} compiler
Fred Drakecc8f44b2001-08-20 19:30:29 +0000278to compile and link your program. There is no need to recompile Python
Fred Drakec37b65e2001-11-28 07:26:15 +0000279itself using \Cpp.
Fred Drakecc8f44b2001-08-20 19:30:29 +0000280
281
282\section{Linking Requirements
283 \label{link-reqs}}
284
285While the \program{configure} script shipped with the Python sources
286will correctly build Python to export the symbols needed by
287dynamically linked extensions, this is not automatically inherited by
288applications which embed the Python library statically, at least on
289\UNIX. This is an issue when the application is linked to the static
290runtime library (\file{libpython.a}) and needs to load dynamic
291extensions (implemented as \file{.so} files).
292
293The problem is that some entry points are defined by the Python
294runtime solely for extension modules to use. If the embedding
295application does not use any of these entry points, some linkers will
296not include those entries in the symbol table of the finished
297executable. Some additional options are needed to inform the linker
298not to remove these symbols.
299
300Determining the right options to use for any given platform can be
301quite difficult, but fortunately the Python configuration already has
302those values. To retrieve them from an installed Python interpreter,
303start an interactive interpreter and have a short session like this:
304
305\begin{verbatim}
306>>> import distutils.sysconfig
307>>> distutils.sysconfig.get_config_var('LINKFORSHARED')
308'-Xlinker -export-dynamic'
309\end{verbatim}
310\refstmodindex{distutils.sysconfig}
311
312The contents of the string presented will be the options that should
313be used. If the string is empty, there's no need to add any
314additional options. The \constant{LINKFORSHARED} definition
315corresponds to the variable of the same name in Python's top-level
316\file{Makefile}.