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