1.. highlight:: c 2 3 4.. _extending-intro: 5 6****************************** 7Extending Python with C or C++ 8****************************** 9 10It is quite easy to add new built-in modules to Python, if you know how to 11program in C. Such :dfn:`extension modules` can do two things that can't be 12done directly in Python: they can implement new built-in object types, and they 13can call C library functions and system calls. 14 15To support extensions, the Python API (Application Programmers Interface) 16defines a set of functions, macros and variables that provide access to most 17aspects of the Python run-time system. The Python API is incorporated in a C 18source file by including the header ``"Python.h"``. 19 20The compilation of an extension module depends on its intended use as well as on 21your system setup; details are given in later chapters. 22 23.. note:: 24 25 The C extension interface is specific to CPython, and extension modules do 26 not work on other Python implementations. In many cases, it is possible to 27 avoid writing C extensions and preserve portability to other implementations. 28 For example, if your use case is calling C library functions or system calls, 29 you should consider using the :mod:`ctypes` module or the `cffi 30 <https://cffi.readthedocs.io/>`_ library rather than writing 31 custom C code. 32 These modules let you write Python code to interface with C code and are more 33 portable between implementations of Python than writing and compiling a C 34 extension module. 35 36 37.. _extending-simpleexample: 38 39A Simple Example 40================ 41 42Let's create an extension module called ``spam`` (the favorite food of Monty 43Python fans...) and let's say we want to create a Python interface to the C 44library function :c:func:`system` [#]_. This function takes a null-terminated 45character string as argument and returns an integer. We want this function to 46be callable from Python as follows: 47 48.. code-block:: pycon 49 50 >>> import spam 51 >>> status = spam.system("ls -l") 52 53Begin by creating a file :file:`spammodule.c`. (Historically, if a module is 54called ``spam``, the C file containing its implementation is called 55:file:`spammodule.c`; if the module name is very long, like ``spammify``, the 56module name can be just :file:`spammify.c`.) 57 58The first two lines of our file can be:: 59 60 #define PY_SSIZE_T_CLEAN 61 #include <Python.h> 62 63which pulls in the Python API (you can add a comment describing the purpose of 64the module and a copyright notice if you like). 65 66.. note:: 67 68 Since Python may define some pre-processor definitions which affect the standard 69 headers on some systems, you *must* include :file:`Python.h` before any standard 70 headers are included. 71 72 It is recommended to always define ``PY_SSIZE_T_CLEAN`` before including 73 ``Python.h``. See :ref:`parsetuple` for a description of this macro. 74 75All user-visible symbols defined by :file:`Python.h` have a prefix of ``Py`` or 76``PY``, except those defined in standard header files. For convenience, and 77since they are used extensively by the Python interpreter, ``"Python.h"`` 78includes a few standard header files: ``<stdio.h>``, ``<string.h>``, 79``<errno.h>``, and ``<stdlib.h>``. If the latter header file does not exist on 80your system, it declares the functions :c:func:`malloc`, :c:func:`free` and 81:c:func:`realloc` directly. 82 83The next thing we add to our module file is the C function that will be called 84when the Python expression ``spam.system(string)`` is evaluated (we'll see 85shortly how it ends up being called):: 86 87 static PyObject * 88 spam_system(PyObject *self, PyObject *args) 89 { 90 const char *command; 91 int sts; 92 93 if (!PyArg_ParseTuple(args, "s", &command)) 94 return NULL; 95 sts = system(command); 96 return PyLong_FromLong(sts); 97 } 98 99There is a straightforward translation from the argument list in Python (for 100example, the single expression ``"ls -l"``) to the arguments passed to the C 101function. The C function always has two arguments, conventionally named *self* 102and *args*. 103 104The *self* argument points to the module object for module-level functions; 105for a method it would point to the object instance. 106 107The *args* argument will be a pointer to a Python tuple object containing the 108arguments. Each item of the tuple corresponds to an argument in the call's 109argument list. The arguments are Python objects --- in order to do anything 110with them in our C function we have to convert them to C values. The function 111:c:func:`PyArg_ParseTuple` in the Python API checks the argument types and 112converts them to C values. It uses a template string to determine the required 113types of the arguments as well as the types of the C variables into which to 114store the converted values. More about this later. 115 116:c:func:`PyArg_ParseTuple` returns true (nonzero) if all arguments have the right 117type and its components have been stored in the variables whose addresses are 118passed. It returns false (zero) if an invalid argument list was passed. In the 119latter case it also raises an appropriate exception so the calling function can 120return ``NULL`` immediately (as we saw in the example). 121 122 123.. _extending-errors: 124 125Intermezzo: Errors and Exceptions 126================================= 127 128An important convention throughout the Python interpreter is the following: when 129a function fails, it should set an exception condition and return an error value 130(usually a ``NULL`` pointer). Exceptions are stored in a static global variable 131inside the interpreter; if this variable is ``NULL`` no exception has occurred. A 132second global variable stores the "associated value" of the exception (the 133second argument to :keyword:`raise`). A third variable contains the stack 134traceback in case the error originated in Python code. These three variables 135are the C equivalents of the result in Python of :meth:`sys.exc_info` (see the 136section on module :mod:`sys` in the Python Library Reference). It is important 137to know about them to understand how errors are passed around. 138 139The Python API defines a number of functions to set various types of exceptions. 140 141The most common one is :c:func:`PyErr_SetString`. Its arguments are an exception 142object and a C string. The exception object is usually a predefined object like 143:c:data:`PyExc_ZeroDivisionError`. The C string indicates the cause of the error 144and is converted to a Python string object and stored as the "associated value" 145of the exception. 146 147Another useful function is :c:func:`PyErr_SetFromErrno`, which only takes an 148exception argument and constructs the associated value by inspection of the 149global variable :c:data:`errno`. The most general function is 150:c:func:`PyErr_SetObject`, which takes two object arguments, the exception and 151its associated value. You don't need to :c:func:`Py_INCREF` the objects passed 152to any of these functions. 153 154You can test non-destructively whether an exception has been set with 155:c:func:`PyErr_Occurred`. This returns the current exception object, or ``NULL`` 156if no exception has occurred. You normally don't need to call 157:c:func:`PyErr_Occurred` to see whether an error occurred in a function call, 158since you should be able to tell from the return value. 159 160When a function *f* that calls another function *g* detects that the latter 161fails, *f* should itself return an error value (usually ``NULL`` or ``-1``). It 162should *not* call one of the :c:func:`PyErr_\*` functions --- one has already 163been called by *g*. *f*'s caller is then supposed to also return an error 164indication to *its* caller, again *without* calling :c:func:`PyErr_\*`, and so on 165--- the most detailed cause of the error was already reported by the function 166that first detected it. Once the error reaches the Python interpreter's main 167loop, this aborts the currently executing Python code and tries to find an 168exception handler specified by the Python programmer. 169 170(There are situations where a module can actually give a more detailed error 171message by calling another :c:func:`PyErr_\*` function, and in such cases it is 172fine to do so. As a general rule, however, this is not necessary, and can cause 173information about the cause of the error to be lost: most operations can fail 174for a variety of reasons.) 175 176To ignore an exception set by a function call that failed, the exception 177condition must be cleared explicitly by calling :c:func:`PyErr_Clear`. The only 178time C code should call :c:func:`PyErr_Clear` is if it doesn't want to pass the 179error on to the interpreter but wants to handle it completely by itself 180(possibly by trying something else, or pretending nothing went wrong). 181 182Every failing :c:func:`malloc` call must be turned into an exception --- the 183direct caller of :c:func:`malloc` (or :c:func:`realloc`) must call 184:c:func:`PyErr_NoMemory` and return a failure indicator itself. All the 185object-creating functions (for example, :c:func:`PyLong_FromLong`) already do 186this, so this note is only relevant to those who call :c:func:`malloc` directly. 187 188Also note that, with the important exception of :c:func:`PyArg_ParseTuple` and 189friends, functions that return an integer status usually return a positive value 190or zero for success and ``-1`` for failure, like Unix system calls. 191 192Finally, be careful to clean up garbage (by making :c:func:`Py_XDECREF` or 193:c:func:`Py_DECREF` calls for objects you have already created) when you return 194an error indicator! 195 196The choice of which exception to raise is entirely yours. There are predeclared 197C objects corresponding to all built-in Python exceptions, such as 198:c:data:`PyExc_ZeroDivisionError`, which you can use directly. Of course, you 199should choose exceptions wisely --- don't use :c:data:`PyExc_TypeError` to mean 200that a file couldn't be opened (that should probably be :c:data:`PyExc_IOError`). 201If something's wrong with the argument list, the :c:func:`PyArg_ParseTuple` 202function usually raises :c:data:`PyExc_TypeError`. If you have an argument whose 203value must be in a particular range or must satisfy other conditions, 204:c:data:`PyExc_ValueError` is appropriate. 205 206You can also define a new exception that is unique to your module. For this, you 207usually declare a static object variable at the beginning of your file:: 208 209 static PyObject *SpamError; 210 211and initialize it in your module's initialization function (:c:func:`PyInit_spam`) 212with an exception object:: 213 214 PyMODINIT_FUNC 215 PyInit_spam(void) 216 { 217 PyObject *m; 218 219 m = PyModule_Create(&spammodule); 220 if (m == NULL) 221 return NULL; 222 223 SpamError = PyErr_NewException("spam.error", NULL, NULL); 224 Py_XINCREF(SpamError); 225 if (PyModule_AddObject(m, "error", SpamError) < 0) { 226 Py_XDECREF(SpamError); 227 Py_CLEAR(SpamError); 228 Py_DECREF(m); 229 return NULL; 230 } 231 232 return m; 233 } 234 235Note that the Python name for the exception object is :exc:`spam.error`. The 236:c:func:`PyErr_NewException` function may create a class with the base class 237being :exc:`Exception` (unless another class is passed in instead of ``NULL``), 238described in :ref:`bltin-exceptions`. 239 240Note also that the :c:data:`SpamError` variable retains a reference to the newly 241created exception class; this is intentional! Since the exception could be 242removed from the module by external code, an owned reference to the class is 243needed to ensure that it will not be discarded, causing :c:data:`SpamError` to 244become a dangling pointer. Should it become a dangling pointer, C code which 245raises the exception could cause a core dump or other unintended side effects. 246 247We discuss the use of ``PyMODINIT_FUNC`` as a function return type later in this 248sample. 249 250The :exc:`spam.error` exception can be raised in your extension module using a 251call to :c:func:`PyErr_SetString` as shown below:: 252 253 static PyObject * 254 spam_system(PyObject *self, PyObject *args) 255 { 256 const char *command; 257 int sts; 258 259 if (!PyArg_ParseTuple(args, "s", &command)) 260 return NULL; 261 sts = system(command); 262 if (sts < 0) { 263 PyErr_SetString(SpamError, "System command failed"); 264 return NULL; 265 } 266 return PyLong_FromLong(sts); 267 } 268 269 270.. _backtoexample: 271 272Back to the Example 273=================== 274 275Going back to our example function, you should now be able to understand this 276statement:: 277 278 if (!PyArg_ParseTuple(args, "s", &command)) 279 return NULL; 280 281It returns ``NULL`` (the error indicator for functions returning object pointers) 282if an error is detected in the argument list, relying on the exception set by 283:c:func:`PyArg_ParseTuple`. Otherwise the string value of the argument has been 284copied to the local variable :c:data:`command`. This is a pointer assignment and 285you are not supposed to modify the string to which it points (so in Standard C, 286the variable :c:data:`command` should properly be declared as ``const char 287*command``). 288 289The next statement is a call to the Unix function :c:func:`system`, passing it 290the string we just got from :c:func:`PyArg_ParseTuple`:: 291 292 sts = system(command); 293 294Our :func:`spam.system` function must return the value of :c:data:`sts` as a 295Python object. This is done using the function :c:func:`PyLong_FromLong`. :: 296 297 return PyLong_FromLong(sts); 298 299In this case, it will return an integer object. (Yes, even integers are objects 300on the heap in Python!) 301 302If you have a C function that returns no useful argument (a function returning 303:c:type:`void`), the corresponding Python function must return ``None``. You 304need this idiom to do so (which is implemented by the :c:macro:`Py_RETURN_NONE` 305macro):: 306 307 Py_INCREF(Py_None); 308 return Py_None; 309 310:c:data:`Py_None` is the C name for the special Python object ``None``. It is a 311genuine Python object rather than a ``NULL`` pointer, which means "error" in most 312contexts, as we have seen. 313 314 315.. _methodtable: 316 317The Module's Method Table and Initialization Function 318===================================================== 319 320I promised to show how :c:func:`spam_system` is called from Python programs. 321First, we need to list its name and address in a "method table":: 322 323 static PyMethodDef SpamMethods[] = { 324 ... 325 {"system", spam_system, METH_VARARGS, 326 "Execute a shell command."}, 327 ... 328 {NULL, NULL, 0, NULL} /* Sentinel */ 329 }; 330 331Note the third entry (``METH_VARARGS``). This is a flag telling the interpreter 332the calling convention to be used for the C function. It should normally always 333be ``METH_VARARGS`` or ``METH_VARARGS | METH_KEYWORDS``; a value of ``0`` means 334that an obsolete variant of :c:func:`PyArg_ParseTuple` is used. 335 336When using only ``METH_VARARGS``, the function should expect the Python-level 337parameters to be passed in as a tuple acceptable for parsing via 338:c:func:`PyArg_ParseTuple`; more information on this function is provided below. 339 340The :const:`METH_KEYWORDS` bit may be set in the third field if keyword 341arguments should be passed to the function. In this case, the C function should 342accept a third ``PyObject *`` parameter which will be a dictionary of keywords. 343Use :c:func:`PyArg_ParseTupleAndKeywords` to parse the arguments to such a 344function. 345 346The method table must be referenced in the module definition structure:: 347 348 static struct PyModuleDef spammodule = { 349 PyModuleDef_HEAD_INIT, 350 "spam", /* name of module */ 351 spam_doc, /* module documentation, may be NULL */ 352 -1, /* size of per-interpreter state of the module, 353 or -1 if the module keeps state in global variables. */ 354 SpamMethods 355 }; 356 357This structure, in turn, must be passed to the interpreter in the module's 358initialization function. The initialization function must be named 359:c:func:`PyInit_name`, where *name* is the name of the module, and should be the 360only non-\ ``static`` item defined in the module file:: 361 362 PyMODINIT_FUNC 363 PyInit_spam(void) 364 { 365 return PyModule_Create(&spammodule); 366 } 367 368Note that PyMODINIT_FUNC declares the function as ``PyObject *`` return type, 369declares any special linkage declarations required by the platform, and for C++ 370declares the function as ``extern "C"``. 371 372When the Python program imports module :mod:`spam` for the first time, 373:c:func:`PyInit_spam` is called. (See below for comments about embedding Python.) 374It calls :c:func:`PyModule_Create`, which returns a module object, and 375inserts built-in function objects into the newly created module based upon the 376table (an array of :c:type:`PyMethodDef` structures) found in the module definition. 377:c:func:`PyModule_Create` returns a pointer to the module object 378that it creates. It may abort with a fatal error for 379certain errors, or return ``NULL`` if the module could not be initialized 380satisfactorily. The init function must return the module object to its caller, 381so that it then gets inserted into ``sys.modules``. 382 383When embedding Python, the :c:func:`PyInit_spam` function is not called 384automatically unless there's an entry in the :c:data:`PyImport_Inittab` table. 385To add the module to the initialization table, use :c:func:`PyImport_AppendInittab`, 386optionally followed by an import of the module:: 387 388 int 389 main(int argc, char *argv[]) 390 { 391 wchar_t *program = Py_DecodeLocale(argv[0], NULL); 392 if (program == NULL) { 393 fprintf(stderr, "Fatal error: cannot decode argv[0]\n"); 394 exit(1); 395 } 396 397 /* Add a built-in module, before Py_Initialize */ 398 if (PyImport_AppendInittab("spam", PyInit_spam) == -1) { 399 fprintf(stderr, "Error: could not extend in-built modules table\n"); 400 exit(1); 401 } 402 403 /* Pass argv[0] to the Python interpreter */ 404 Py_SetProgramName(program); 405 406 /* Initialize the Python interpreter. Required. 407 If this step fails, it will be a fatal error. */ 408 Py_Initialize(); 409 410 /* Optionally import the module; alternatively, 411 import can be deferred until the embedded script 412 imports it. */ 413 pmodule = PyImport_ImportModule("spam"); 414 if (!pmodule) { 415 PyErr_Print(); 416 fprintf(stderr, "Error: could not import module 'spam'\n"); 417 } 418 419 ... 420 421 PyMem_RawFree(program); 422 return 0; 423 } 424 425.. note:: 426 427 Removing entries from ``sys.modules`` or importing compiled modules into 428 multiple interpreters within a process (or following a :c:func:`fork` without an 429 intervening :c:func:`exec`) can create problems for some extension modules. 430 Extension module authors should exercise caution when initializing internal data 431 structures. 432 433A more substantial example module is included in the Python source distribution 434as :file:`Modules/xxmodule.c`. This file may be used as a template or simply 435read as an example. 436 437.. note:: 438 439 Unlike our ``spam`` example, ``xxmodule`` uses *multi-phase initialization* 440 (new in Python 3.5), where a PyModuleDef structure is returned from 441 ``PyInit_spam``, and creation of the module is left to the import machinery. 442 For details on multi-phase initialization, see :PEP:`489`. 443 444 445.. _compilation: 446 447Compilation and Linkage 448======================= 449 450There are two more things to do before you can use your new extension: compiling 451and linking it with the Python system. If you use dynamic loading, the details 452may depend on the style of dynamic loading your system uses; see the chapters 453about building extension modules (chapter :ref:`building`) and additional 454information that pertains only to building on Windows (chapter 455:ref:`building-on-windows`) for more information about this. 456 457If you can't use dynamic loading, or if you want to make your module a permanent 458part of the Python interpreter, you will have to change the configuration setup 459and rebuild the interpreter. Luckily, this is very simple on Unix: just place 460your file (:file:`spammodule.c` for example) in the :file:`Modules/` directory 461of an unpacked source distribution, add a line to the file 462:file:`Modules/Setup.local` describing your file: 463 464.. code-block:: sh 465 466 spam spammodule.o 467 468and rebuild the interpreter by running :program:`make` in the toplevel 469directory. You can also run :program:`make` in the :file:`Modules/` 470subdirectory, but then you must first rebuild :file:`Makefile` there by running 471':program:`make` Makefile'. (This is necessary each time you change the 472:file:`Setup` file.) 473 474If your module requires additional libraries to link with, these can be listed 475on the line in the configuration file as well, for instance: 476 477.. code-block:: sh 478 479 spam spammodule.o -lX11 480 481 482.. _callingpython: 483 484Calling Python Functions from C 485=============================== 486 487So far we have concentrated on making C functions callable from Python. The 488reverse is also useful: calling Python functions from C. This is especially the 489case for libraries that support so-called "callback" functions. If a C 490interface makes use of callbacks, the equivalent Python often needs to provide a 491callback mechanism to the Python programmer; the implementation will require 492calling the Python callback functions from a C callback. Other uses are also 493imaginable. 494 495Fortunately, the Python interpreter is easily called recursively, and there is a 496standard interface to call a Python function. (I won't dwell on how to call the 497Python parser with a particular string as input --- if you're interested, have a 498look at the implementation of the :option:`-c` command line option in 499:file:`Modules/main.c` from the Python source code.) 500 501Calling a Python function is easy. First, the Python program must somehow pass 502you the Python function object. You should provide a function (or some other 503interface) to do this. When this function is called, save a pointer to the 504Python function object (be careful to :c:func:`Py_INCREF` it!) in a global 505variable --- or wherever you see fit. For example, the following function might 506be part of a module definition:: 507 508 static PyObject *my_callback = NULL; 509 510 static PyObject * 511 my_set_callback(PyObject *dummy, PyObject *args) 512 { 513 PyObject *result = NULL; 514 PyObject *temp; 515 516 if (PyArg_ParseTuple(args, "O:set_callback", &temp)) { 517 if (!PyCallable_Check(temp)) { 518 PyErr_SetString(PyExc_TypeError, "parameter must be callable"); 519 return NULL; 520 } 521 Py_XINCREF(temp); /* Add a reference to new callback */ 522 Py_XDECREF(my_callback); /* Dispose of previous callback */ 523 my_callback = temp; /* Remember new callback */ 524 /* Boilerplate to return "None" */ 525 Py_INCREF(Py_None); 526 result = Py_None; 527 } 528 return result; 529 } 530 531This function must be registered with the interpreter using the 532:const:`METH_VARARGS` flag; this is described in section :ref:`methodtable`. The 533:c:func:`PyArg_ParseTuple` function and its arguments are documented in section 534:ref:`parsetuple`. 535 536The macros :c:func:`Py_XINCREF` and :c:func:`Py_XDECREF` increment/decrement the 537reference count of an object and are safe in the presence of ``NULL`` pointers 538(but note that *temp* will not be ``NULL`` in this context). More info on them 539in section :ref:`refcounts`. 540 541.. index:: single: PyObject_CallObject() 542 543Later, when it is time to call the function, you call the C function 544:c:func:`PyObject_CallObject`. This function has two arguments, both pointers to 545arbitrary Python objects: the Python function, and the argument list. The 546argument list must always be a tuple object, whose length is the number of 547arguments. To call the Python function with no arguments, pass in ``NULL``, or 548an empty tuple; to call it with one argument, pass a singleton tuple. 549:c:func:`Py_BuildValue` returns a tuple when its format string consists of zero 550or more format codes between parentheses. For example:: 551 552 int arg; 553 PyObject *arglist; 554 PyObject *result; 555 ... 556 arg = 123; 557 ... 558 /* Time to call the callback */ 559 arglist = Py_BuildValue("(i)", arg); 560 result = PyObject_CallObject(my_callback, arglist); 561 Py_DECREF(arglist); 562 563:c:func:`PyObject_CallObject` returns a Python object pointer: this is the return 564value of the Python function. :c:func:`PyObject_CallObject` is 565"reference-count-neutral" with respect to its arguments. In the example a new 566tuple was created to serve as the argument list, which is 567:c:func:`Py_DECREF`\ -ed immediately after the :c:func:`PyObject_CallObject` 568call. 569 570The return value of :c:func:`PyObject_CallObject` is "new": either it is a brand 571new object, or it is an existing object whose reference count has been 572incremented. So, unless you want to save it in a global variable, you should 573somehow :c:func:`Py_DECREF` the result, even (especially!) if you are not 574interested in its value. 575 576Before you do this, however, it is important to check that the return value 577isn't ``NULL``. If it is, the Python function terminated by raising an exception. 578If the C code that called :c:func:`PyObject_CallObject` is called from Python, it 579should now return an error indication to its Python caller, so the interpreter 580can print a stack trace, or the calling Python code can handle the exception. 581If this is not possible or desirable, the exception should be cleared by calling 582:c:func:`PyErr_Clear`. For example:: 583 584 if (result == NULL) 585 return NULL; /* Pass error back */ 586 ...use result... 587 Py_DECREF(result); 588 589Depending on the desired interface to the Python callback function, you may also 590have to provide an argument list to :c:func:`PyObject_CallObject`. In some cases 591the argument list is also provided by the Python program, through the same 592interface that specified the callback function. It can then be saved and used 593in the same manner as the function object. In other cases, you may have to 594construct a new tuple to pass as the argument list. The simplest way to do this 595is to call :c:func:`Py_BuildValue`. For example, if you want to pass an integral 596event code, you might use the following code:: 597 598 PyObject *arglist; 599 ... 600 arglist = Py_BuildValue("(l)", eventcode); 601 result = PyObject_CallObject(my_callback, arglist); 602 Py_DECREF(arglist); 603 if (result == NULL) 604 return NULL; /* Pass error back */ 605 /* Here maybe use the result */ 606 Py_DECREF(result); 607 608Note the placement of ``Py_DECREF(arglist)`` immediately after the call, before 609the error check! Also note that strictly speaking this code is not complete: 610:c:func:`Py_BuildValue` may run out of memory, and this should be checked. 611 612You may also call a function with keyword arguments by using 613:c:func:`PyObject_Call`, which supports arguments and keyword arguments. As in 614the above example, we use :c:func:`Py_BuildValue` to construct the dictionary. :: 615 616 PyObject *dict; 617 ... 618 dict = Py_BuildValue("{s:i}", "name", val); 619 result = PyObject_Call(my_callback, NULL, dict); 620 Py_DECREF(dict); 621 if (result == NULL) 622 return NULL; /* Pass error back */ 623 /* Here maybe use the result */ 624 Py_DECREF(result); 625 626 627.. _parsetuple: 628 629Extracting Parameters in Extension Functions 630============================================ 631 632.. index:: single: PyArg_ParseTuple() 633 634The :c:func:`PyArg_ParseTuple` function is declared as follows:: 635 636 int PyArg_ParseTuple(PyObject *arg, const char *format, ...); 637 638The *arg* argument must be a tuple object containing an argument list passed 639from Python to a C function. The *format* argument must be a format string, 640whose syntax is explained in :ref:`arg-parsing` in the Python/C API Reference 641Manual. The remaining arguments must be addresses of variables whose type is 642determined by the format string. 643 644Note that while :c:func:`PyArg_ParseTuple` checks that the Python arguments have 645the required types, it cannot check the validity of the addresses of C variables 646passed to the call: if you make mistakes there, your code will probably crash or 647at least overwrite random bits in memory. So be careful! 648 649Note that any Python object references which are provided to the caller are 650*borrowed* references; do not decrement their reference count! 651 652Some example calls:: 653 654 #define PY_SSIZE_T_CLEAN /* Make "s#" use Py_ssize_t rather than int. */ 655 #include <Python.h> 656 657:: 658 659 int ok; 660 int i, j; 661 long k, l; 662 const char *s; 663 Py_ssize_t size; 664 665 ok = PyArg_ParseTuple(args, ""); /* No arguments */ 666 /* Python call: f() */ 667 668:: 669 670 ok = PyArg_ParseTuple(args, "s", &s); /* A string */ 671 /* Possible Python call: f('whoops!') */ 672 673:: 674 675 ok = PyArg_ParseTuple(args, "lls", &k, &l, &s); /* Two longs and a string */ 676 /* Possible Python call: f(1, 2, 'three') */ 677 678:: 679 680 ok = PyArg_ParseTuple(args, "(ii)s#", &i, &j, &s, &size); 681 /* A pair of ints and a string, whose size is also returned */ 682 /* Possible Python call: f((1, 2), 'three') */ 683 684:: 685 686 { 687 const char *file; 688 const char *mode = "r"; 689 int bufsize = 0; 690 ok = PyArg_ParseTuple(args, "s|si", &file, &mode, &bufsize); 691 /* A string, and optionally another string and an integer */ 692 /* Possible Python calls: 693 f('spam') 694 f('spam', 'w') 695 f('spam', 'wb', 100000) */ 696 } 697 698:: 699 700 { 701 int left, top, right, bottom, h, v; 702 ok = PyArg_ParseTuple(args, "((ii)(ii))(ii)", 703 &left, &top, &right, &bottom, &h, &v); 704 /* A rectangle and a point */ 705 /* Possible Python call: 706 f(((0, 0), (400, 300)), (10, 10)) */ 707 } 708 709:: 710 711 { 712 Py_complex c; 713 ok = PyArg_ParseTuple(args, "D:myfunction", &c); 714 /* a complex, also providing a function name for errors */ 715 /* Possible Python call: myfunction(1+2j) */ 716 } 717 718 719.. _parsetupleandkeywords: 720 721Keyword Parameters for Extension Functions 722========================================== 723 724.. index:: single: PyArg_ParseTupleAndKeywords() 725 726The :c:func:`PyArg_ParseTupleAndKeywords` function is declared as follows:: 727 728 int PyArg_ParseTupleAndKeywords(PyObject *arg, PyObject *kwdict, 729 const char *format, char *kwlist[], ...); 730 731The *arg* and *format* parameters are identical to those of the 732:c:func:`PyArg_ParseTuple` function. The *kwdict* parameter is the dictionary of 733keywords received as the third parameter from the Python runtime. The *kwlist* 734parameter is a ``NULL``-terminated list of strings which identify the parameters; 735the names are matched with the type information from *format* from left to 736right. On success, :c:func:`PyArg_ParseTupleAndKeywords` returns true, otherwise 737it returns false and raises an appropriate exception. 738 739.. note:: 740 741 Nested tuples cannot be parsed when using keyword arguments! Keyword parameters 742 passed in which are not present in the *kwlist* will cause :exc:`TypeError` to 743 be raised. 744 745.. index:: single: Philbrick, Geoff 746 747Here is an example module which uses keywords, based on an example by Geoff 748Philbrick (philbrick@hks.com):: 749 750 #define PY_SSIZE_T_CLEAN /* Make "s#" use Py_ssize_t rather than int. */ 751 #include <Python.h> 752 753 static PyObject * 754 keywdarg_parrot(PyObject *self, PyObject *args, PyObject *keywds) 755 { 756 int voltage; 757 const char *state = "a stiff"; 758 const char *action = "voom"; 759 const char *type = "Norwegian Blue"; 760 761 static char *kwlist[] = {"voltage", "state", "action", "type", NULL}; 762 763 if (!PyArg_ParseTupleAndKeywords(args, keywds, "i|sss", kwlist, 764 &voltage, &state, &action, &type)) 765 return NULL; 766 767 printf("-- This parrot wouldn't %s if you put %i Volts through it.\n", 768 action, voltage); 769 printf("-- Lovely plumage, the %s -- It's %s!\n", type, state); 770 771 Py_RETURN_NONE; 772 } 773 774 static PyMethodDef keywdarg_methods[] = { 775 /* The cast of the function is necessary since PyCFunction values 776 * only take two PyObject* parameters, and keywdarg_parrot() takes 777 * three. 778 */ 779 {"parrot", (PyCFunction)(void(*)(void))keywdarg_parrot, METH_VARARGS | METH_KEYWORDS, 780 "Print a lovely skit to standard output."}, 781 {NULL, NULL, 0, NULL} /* sentinel */ 782 }; 783 784 static struct PyModuleDef keywdargmodule = { 785 PyModuleDef_HEAD_INIT, 786 "keywdarg", 787 NULL, 788 -1, 789 keywdarg_methods 790 }; 791 792 PyMODINIT_FUNC 793 PyInit_keywdarg(void) 794 { 795 return PyModule_Create(&keywdargmodule); 796 } 797 798 799.. _buildvalue: 800 801Building Arbitrary Values 802========================= 803 804This function is the counterpart to :c:func:`PyArg_ParseTuple`. It is declared 805as follows:: 806 807 PyObject *Py_BuildValue(const char *format, ...); 808 809It recognizes a set of format units similar to the ones recognized by 810:c:func:`PyArg_ParseTuple`, but the arguments (which are input to the function, 811not output) must not be pointers, just values. It returns a new Python object, 812suitable for returning from a C function called from Python. 813 814One difference with :c:func:`PyArg_ParseTuple`: while the latter requires its 815first argument to be a tuple (since Python argument lists are always represented 816as tuples internally), :c:func:`Py_BuildValue` does not always build a tuple. It 817builds a tuple only if its format string contains two or more format units. If 818the format string is empty, it returns ``None``; if it contains exactly one 819format unit, it returns whatever object is described by that format unit. To 820force it to return a tuple of size 0 or one, parenthesize the format string. 821 822Examples (to the left the call, to the right the resulting Python value): 823 824.. code-block:: none 825 826 Py_BuildValue("") None 827 Py_BuildValue("i", 123) 123 828 Py_BuildValue("iii", 123, 456, 789) (123, 456, 789) 829 Py_BuildValue("s", "hello") 'hello' 830 Py_BuildValue("y", "hello") b'hello' 831 Py_BuildValue("ss", "hello", "world") ('hello', 'world') 832 Py_BuildValue("s#", "hello", 4) 'hell' 833 Py_BuildValue("y#", "hello", 4) b'hell' 834 Py_BuildValue("()") () 835 Py_BuildValue("(i)", 123) (123,) 836 Py_BuildValue("(ii)", 123, 456) (123, 456) 837 Py_BuildValue("(i,i)", 123, 456) (123, 456) 838 Py_BuildValue("[i,i]", 123, 456) [123, 456] 839 Py_BuildValue("{s:i,s:i}", 840 "abc", 123, "def", 456) {'abc': 123, 'def': 456} 841 Py_BuildValue("((ii)(ii)) (ii)", 842 1, 2, 3, 4, 5, 6) (((1, 2), (3, 4)), (5, 6)) 843 844 845.. _refcounts: 846 847Reference Counts 848================ 849 850In languages like C or C++, the programmer is responsible for dynamic allocation 851and deallocation of memory on the heap. In C, this is done using the functions 852:c:func:`malloc` and :c:func:`free`. In C++, the operators ``new`` and 853``delete`` are used with essentially the same meaning and we'll restrict 854the following discussion to the C case. 855 856Every block of memory allocated with :c:func:`malloc` should eventually be 857returned to the pool of available memory by exactly one call to :c:func:`free`. 858It is important to call :c:func:`free` at the right time. If a block's address 859is forgotten but :c:func:`free` is not called for it, the memory it occupies 860cannot be reused until the program terminates. This is called a :dfn:`memory 861leak`. On the other hand, if a program calls :c:func:`free` for a block and then 862continues to use the block, it creates a conflict with re-use of the block 863through another :c:func:`malloc` call. This is called :dfn:`using freed memory`. 864It has the same bad consequences as referencing uninitialized data --- core 865dumps, wrong results, mysterious crashes. 866 867Common causes of memory leaks are unusual paths through the code. For instance, 868a function may allocate a block of memory, do some calculation, and then free 869the block again. Now a change in the requirements for the function may add a 870test to the calculation that detects an error condition and can return 871prematurely from the function. It's easy to forget to free the allocated memory 872block when taking this premature exit, especially when it is added later to the 873code. Such leaks, once introduced, often go undetected for a long time: the 874error exit is taken only in a small fraction of all calls, and most modern 875machines have plenty of virtual memory, so the leak only becomes apparent in a 876long-running process that uses the leaking function frequently. Therefore, it's 877important to prevent leaks from happening by having a coding convention or 878strategy that minimizes this kind of errors. 879 880Since Python makes heavy use of :c:func:`malloc` and :c:func:`free`, it needs a 881strategy to avoid memory leaks as well as the use of freed memory. The chosen 882method is called :dfn:`reference counting`. The principle is simple: every 883object contains a counter, which is incremented when a reference to the object 884is stored somewhere, and which is decremented when a reference to it is deleted. 885When the counter reaches zero, the last reference to the object has been deleted 886and the object is freed. 887 888An alternative strategy is called :dfn:`automatic garbage collection`. 889(Sometimes, reference counting is also referred to as a garbage collection 890strategy, hence my use of "automatic" to distinguish the two.) The big 891advantage of automatic garbage collection is that the user doesn't need to call 892:c:func:`free` explicitly. (Another claimed advantage is an improvement in speed 893or memory usage --- this is no hard fact however.) The disadvantage is that for 894C, there is no truly portable automatic garbage collector, while reference 895counting can be implemented portably (as long as the functions :c:func:`malloc` 896and :c:func:`free` are available --- which the C Standard guarantees). Maybe some 897day a sufficiently portable automatic garbage collector will be available for C. 898Until then, we'll have to live with reference counts. 899 900While Python uses the traditional reference counting implementation, it also 901offers a cycle detector that works to detect reference cycles. This allows 902applications to not worry about creating direct or indirect circular references; 903these are the weakness of garbage collection implemented using only reference 904counting. Reference cycles consist of objects which contain (possibly indirect) 905references to themselves, so that each object in the cycle has a reference count 906which is non-zero. Typical reference counting implementations are not able to 907reclaim the memory belonging to any objects in a reference cycle, or referenced 908from the objects in the cycle, even though there are no further references to 909the cycle itself. 910 911The cycle detector is able to detect garbage cycles and can reclaim them. 912The :mod:`gc` module exposes a way to run the detector (the 913:func:`~gc.collect` function), as well as configuration 914interfaces and the ability to disable the detector at runtime. The cycle 915detector is considered an optional component; though it is included by default, 916it can be disabled at build time using the :option:`!--without-cycle-gc` option 917to the :program:`configure` script on Unix platforms (including Mac OS X). If 918the cycle detector is disabled in this way, the :mod:`gc` module will not be 919available. 920 921 922.. _refcountsinpython: 923 924Reference Counting in Python 925---------------------------- 926 927There are two macros, ``Py_INCREF(x)`` and ``Py_DECREF(x)``, which handle the 928incrementing and decrementing of the reference count. :c:func:`Py_DECREF` also 929frees the object when the count reaches zero. For flexibility, it doesn't call 930:c:func:`free` directly --- rather, it makes a call through a function pointer in 931the object's :dfn:`type object`. For this purpose (and others), every object 932also contains a pointer to its type object. 933 934The big question now remains: when to use ``Py_INCREF(x)`` and ``Py_DECREF(x)``? 935Let's first introduce some terms. Nobody "owns" an object; however, you can 936:dfn:`own a reference` to an object. An object's reference count is now defined 937as the number of owned references to it. The owner of a reference is 938responsible for calling :c:func:`Py_DECREF` when the reference is no longer 939needed. Ownership of a reference can be transferred. There are three ways to 940dispose of an owned reference: pass it on, store it, or call :c:func:`Py_DECREF`. 941Forgetting to dispose of an owned reference creates a memory leak. 942 943It is also possible to :dfn:`borrow` [#]_ a reference to an object. The 944borrower of a reference should not call :c:func:`Py_DECREF`. The borrower must 945not hold on to the object longer than the owner from which it was borrowed. 946Using a borrowed reference after the owner has disposed of it risks using freed 947memory and should be avoided completely [#]_. 948 949The advantage of borrowing over owning a reference is that you don't need to 950take care of disposing of the reference on all possible paths through the code 951--- in other words, with a borrowed reference you don't run the risk of leaking 952when a premature exit is taken. The disadvantage of borrowing over owning is 953that there are some subtle situations where in seemingly correct code a borrowed 954reference can be used after the owner from which it was borrowed has in fact 955disposed of it. 956 957A borrowed reference can be changed into an owned reference by calling 958:c:func:`Py_INCREF`. This does not affect the status of the owner from which the 959reference was borrowed --- it creates a new owned reference, and gives full 960owner responsibilities (the new owner must dispose of the reference properly, as 961well as the previous owner). 962 963 964.. _ownershiprules: 965 966Ownership Rules 967--------------- 968 969Whenever an object reference is passed into or out of a function, it is part of 970the function's interface specification whether ownership is transferred with the 971reference or not. 972 973Most functions that return a reference to an object pass on ownership with the 974reference. In particular, all functions whose function it is to create a new 975object, such as :c:func:`PyLong_FromLong` and :c:func:`Py_BuildValue`, pass 976ownership to the receiver. Even if the object is not actually new, you still 977receive ownership of a new reference to that object. For instance, 978:c:func:`PyLong_FromLong` maintains a cache of popular values and can return a 979reference to a cached item. 980 981Many functions that extract objects from other objects also transfer ownership 982with the reference, for instance :c:func:`PyObject_GetAttrString`. The picture 983is less clear, here, however, since a few common routines are exceptions: 984:c:func:`PyTuple_GetItem`, :c:func:`PyList_GetItem`, :c:func:`PyDict_GetItem`, and 985:c:func:`PyDict_GetItemString` all return references that you borrow from the 986tuple, list or dictionary. 987 988The function :c:func:`PyImport_AddModule` also returns a borrowed reference, even 989though it may actually create the object it returns: this is possible because an 990owned reference to the object is stored in ``sys.modules``. 991 992When you pass an object reference into another function, in general, the 993function borrows the reference from you --- if it needs to store it, it will use 994:c:func:`Py_INCREF` to become an independent owner. There are exactly two 995important exceptions to this rule: :c:func:`PyTuple_SetItem` and 996:c:func:`PyList_SetItem`. These functions take over ownership of the item passed 997to them --- even if they fail! (Note that :c:func:`PyDict_SetItem` and friends 998don't take over ownership --- they are "normal.") 999 1000When a C function is called from Python, it borrows references to its arguments 1001from the caller. The caller owns a reference to the object, so the borrowed 1002reference's lifetime is guaranteed until the function returns. Only when such a 1003borrowed reference must be stored or passed on, it must be turned into an owned 1004reference by calling :c:func:`Py_INCREF`. 1005 1006The object reference returned from a C function that is called from Python must 1007be an owned reference --- ownership is transferred from the function to its 1008caller. 1009 1010 1011.. _thinice: 1012 1013Thin Ice 1014-------- 1015 1016There are a few situations where seemingly harmless use of a borrowed reference 1017can lead to problems. These all have to do with implicit invocations of the 1018interpreter, which can cause the owner of a reference to dispose of it. 1019 1020The first and most important case to know about is using :c:func:`Py_DECREF` on 1021an unrelated object while borrowing a reference to a list item. For instance:: 1022 1023 void 1024 bug(PyObject *list) 1025 { 1026 PyObject *item = PyList_GetItem(list, 0); 1027 1028 PyList_SetItem(list, 1, PyLong_FromLong(0L)); 1029 PyObject_Print(item, stdout, 0); /* BUG! */ 1030 } 1031 1032This function first borrows a reference to ``list[0]``, then replaces 1033``list[1]`` with the value ``0``, and finally prints the borrowed reference. 1034Looks harmless, right? But it's not! 1035 1036Let's follow the control flow into :c:func:`PyList_SetItem`. The list owns 1037references to all its items, so when item 1 is replaced, it has to dispose of 1038the original item 1. Now let's suppose the original item 1 was an instance of a 1039user-defined class, and let's further suppose that the class defined a 1040:meth:`__del__` method. If this class instance has a reference count of 1, 1041disposing of it will call its :meth:`__del__` method. 1042 1043Since it is written in Python, the :meth:`__del__` method can execute arbitrary 1044Python code. Could it perhaps do something to invalidate the reference to 1045``item`` in :c:func:`bug`? You bet! Assuming that the list passed into 1046:c:func:`bug` is accessible to the :meth:`__del__` method, it could execute a 1047statement to the effect of ``del list[0]``, and assuming this was the last 1048reference to that object, it would free the memory associated with it, thereby 1049invalidating ``item``. 1050 1051The solution, once you know the source of the problem, is easy: temporarily 1052increment the reference count. The correct version of the function reads:: 1053 1054 void 1055 no_bug(PyObject *list) 1056 { 1057 PyObject *item = PyList_GetItem(list, 0); 1058 1059 Py_INCREF(item); 1060 PyList_SetItem(list, 1, PyLong_FromLong(0L)); 1061 PyObject_Print(item, stdout, 0); 1062 Py_DECREF(item); 1063 } 1064 1065This is a true story. An older version of Python contained variants of this bug 1066and someone spent a considerable amount of time in a C debugger to figure out 1067why his :meth:`__del__` methods would fail... 1068 1069The second case of problems with a borrowed reference is a variant involving 1070threads. Normally, multiple threads in the Python interpreter can't get in each 1071other's way, because there is a global lock protecting Python's entire object 1072space. However, it is possible to temporarily release this lock using the macro 1073:c:macro:`Py_BEGIN_ALLOW_THREADS`, and to re-acquire it using 1074:c:macro:`Py_END_ALLOW_THREADS`. This is common around blocking I/O calls, to 1075let other threads use the processor while waiting for the I/O to complete. 1076Obviously, the following function has the same problem as the previous one:: 1077 1078 void 1079 bug(PyObject *list) 1080 { 1081 PyObject *item = PyList_GetItem(list, 0); 1082 Py_BEGIN_ALLOW_THREADS 1083 ...some blocking I/O call... 1084 Py_END_ALLOW_THREADS 1085 PyObject_Print(item, stdout, 0); /* BUG! */ 1086 } 1087 1088 1089.. _nullpointers: 1090 1091NULL Pointers 1092------------- 1093 1094In general, functions that take object references as arguments do not expect you 1095to pass them ``NULL`` pointers, and will dump core (or cause later core dumps) if 1096you do so. Functions that return object references generally return ``NULL`` only 1097to indicate that an exception occurred. The reason for not testing for ``NULL`` 1098arguments is that functions often pass the objects they receive on to other 1099function --- if each function were to test for ``NULL``, there would be a lot of 1100redundant tests and the code would run more slowly. 1101 1102It is better to test for ``NULL`` only at the "source:" when a pointer that may be 1103``NULL`` is received, for example, from :c:func:`malloc` or from a function that 1104may raise an exception. 1105 1106The macros :c:func:`Py_INCREF` and :c:func:`Py_DECREF` do not check for ``NULL`` 1107pointers --- however, their variants :c:func:`Py_XINCREF` and :c:func:`Py_XDECREF` 1108do. 1109 1110The macros for checking for a particular object type (``Pytype_Check()``) don't 1111check for ``NULL`` pointers --- again, there is much code that calls several of 1112these in a row to test an object against various different expected types, and 1113this would generate redundant tests. There are no variants with ``NULL`` 1114checking. 1115 1116The C function calling mechanism guarantees that the argument list passed to C 1117functions (``args`` in the examples) is never ``NULL`` --- in fact it guarantees 1118that it is always a tuple [#]_. 1119 1120It is a severe error to ever let a ``NULL`` pointer "escape" to the Python user. 1121 1122.. Frank Stajano: 1123 A pedagogically buggy example, along the lines of the previous listing, would 1124 be helpful here -- showing in more concrete terms what sort of actions could 1125 cause the problem. I can't very well imagine it from the description. 1126 1127 1128.. _cplusplus: 1129 1130Writing Extensions in C++ 1131========================= 1132 1133It is possible to write extension modules in C++. Some restrictions apply. If 1134the main program (the Python interpreter) is compiled and linked by the C 1135compiler, global or static objects with constructors cannot be used. This is 1136not a problem if the main program is linked by the C++ compiler. Functions that 1137will be called by the Python interpreter (in particular, module initialization 1138functions) have to be declared using ``extern "C"``. It is unnecessary to 1139enclose the Python header files in ``extern "C" {...}`` --- they use this form 1140already if the symbol ``__cplusplus`` is defined (all recent C++ compilers 1141define this symbol). 1142 1143 1144.. _using-capsules: 1145 1146Providing a C API for an Extension Module 1147========================================= 1148 1149.. sectionauthor:: Konrad Hinsen <hinsen@cnrs-orleans.fr> 1150 1151 1152Many extension modules just provide new functions and types to be used from 1153Python, but sometimes the code in an extension module can be useful for other 1154extension modules. For example, an extension module could implement a type 1155"collection" which works like lists without order. Just like the standard Python 1156list type has a C API which permits extension modules to create and manipulate 1157lists, this new collection type should have a set of C functions for direct 1158manipulation from other extension modules. 1159 1160At first sight this seems easy: just write the functions (without declaring them 1161``static``, of course), provide an appropriate header file, and document 1162the C API. And in fact this would work if all extension modules were always 1163linked statically with the Python interpreter. When modules are used as shared 1164libraries, however, the symbols defined in one module may not be visible to 1165another module. The details of visibility depend on the operating system; some 1166systems use one global namespace for the Python interpreter and all extension 1167modules (Windows, for example), whereas others require an explicit list of 1168imported symbols at module link time (AIX is one example), or offer a choice of 1169different strategies (most Unices). And even if symbols are globally visible, 1170the module whose functions one wishes to call might not have been loaded yet! 1171 1172Portability therefore requires not to make any assumptions about symbol 1173visibility. This means that all symbols in extension modules should be declared 1174``static``, except for the module's initialization function, in order to 1175avoid name clashes with other extension modules (as discussed in section 1176:ref:`methodtable`). And it means that symbols that *should* be accessible from 1177other extension modules must be exported in a different way. 1178 1179Python provides a special mechanism to pass C-level information (pointers) from 1180one extension module to another one: Capsules. A Capsule is a Python data type 1181which stores a pointer (:c:type:`void \*`). Capsules can only be created and 1182accessed via their C API, but they can be passed around like any other Python 1183object. In particular, they can be assigned to a name in an extension module's 1184namespace. Other extension modules can then import this module, retrieve the 1185value of this name, and then retrieve the pointer from the Capsule. 1186 1187There are many ways in which Capsules can be used to export the C API of an 1188extension module. Each function could get its own Capsule, or all C API pointers 1189could be stored in an array whose address is published in a Capsule. And the 1190various tasks of storing and retrieving the pointers can be distributed in 1191different ways between the module providing the code and the client modules. 1192 1193Whichever method you choose, it's important to name your Capsules properly. 1194The function :c:func:`PyCapsule_New` takes a name parameter 1195(:c:type:`const char \*`); you're permitted to pass in a ``NULL`` name, but 1196we strongly encourage you to specify a name. Properly named Capsules provide 1197a degree of runtime type-safety; there is no feasible way to tell one unnamed 1198Capsule from another. 1199 1200In particular, Capsules used to expose C APIs should be given a name following 1201this convention:: 1202 1203 modulename.attributename 1204 1205The convenience function :c:func:`PyCapsule_Import` makes it easy to 1206load a C API provided via a Capsule, but only if the Capsule's name 1207matches this convention. This behavior gives C API users a high degree 1208of certainty that the Capsule they load contains the correct C API. 1209 1210The following example demonstrates an approach that puts most of the burden on 1211the writer of the exporting module, which is appropriate for commonly used 1212library modules. It stores all C API pointers (just one in the example!) in an 1213array of :c:type:`void` pointers which becomes the value of a Capsule. The header 1214file corresponding to the module provides a macro that takes care of importing 1215the module and retrieving its C API pointers; client modules only have to call 1216this macro before accessing the C API. 1217 1218The exporting module is a modification of the :mod:`spam` module from section 1219:ref:`extending-simpleexample`. The function :func:`spam.system` does not call 1220the C library function :c:func:`system` directly, but a function 1221:c:func:`PySpam_System`, which would of course do something more complicated in 1222reality (such as adding "spam" to every command). This function 1223:c:func:`PySpam_System` is also exported to other extension modules. 1224 1225The function :c:func:`PySpam_System` is a plain C function, declared 1226``static`` like everything else:: 1227 1228 static int 1229 PySpam_System(const char *command) 1230 { 1231 return system(command); 1232 } 1233 1234The function :c:func:`spam_system` is modified in a trivial way:: 1235 1236 static PyObject * 1237 spam_system(PyObject *self, PyObject *args) 1238 { 1239 const char *command; 1240 int sts; 1241 1242 if (!PyArg_ParseTuple(args, "s", &command)) 1243 return NULL; 1244 sts = PySpam_System(command); 1245 return PyLong_FromLong(sts); 1246 } 1247 1248In the beginning of the module, right after the line :: 1249 1250 #include <Python.h> 1251 1252two more lines must be added:: 1253 1254 #define SPAM_MODULE 1255 #include "spammodule.h" 1256 1257The ``#define`` is used to tell the header file that it is being included in the 1258exporting module, not a client module. Finally, the module's initialization 1259function must take care of initializing the C API pointer array:: 1260 1261 PyMODINIT_FUNC 1262 PyInit_spam(void) 1263 { 1264 PyObject *m; 1265 static void *PySpam_API[PySpam_API_pointers]; 1266 PyObject *c_api_object; 1267 1268 m = PyModule_Create(&spammodule); 1269 if (m == NULL) 1270 return NULL; 1271 1272 /* Initialize the C API pointer array */ 1273 PySpam_API[PySpam_System_NUM] = (void *)PySpam_System; 1274 1275 /* Create a Capsule containing the API pointer array's address */ 1276 c_api_object = PyCapsule_New((void *)PySpam_API, "spam._C_API", NULL); 1277 1278 if (PyModule_AddObject(m, "_C_API", c_api_object) < 0) { 1279 Py_XDECREF(c_api_object); 1280 Py_DECREF(m); 1281 return NULL; 1282 } 1283 1284 return m; 1285 } 1286 1287Note that ``PySpam_API`` is declared ``static``; otherwise the pointer 1288array would disappear when :func:`PyInit_spam` terminates! 1289 1290The bulk of the work is in the header file :file:`spammodule.h`, which looks 1291like this:: 1292 1293 #ifndef Py_SPAMMODULE_H 1294 #define Py_SPAMMODULE_H 1295 #ifdef __cplusplus 1296 extern "C" { 1297 #endif 1298 1299 /* Header file for spammodule */ 1300 1301 /* C API functions */ 1302 #define PySpam_System_NUM 0 1303 #define PySpam_System_RETURN int 1304 #define PySpam_System_PROTO (const char *command) 1305 1306 /* Total number of C API pointers */ 1307 #define PySpam_API_pointers 1 1308 1309 1310 #ifdef SPAM_MODULE 1311 /* This section is used when compiling spammodule.c */ 1312 1313 static PySpam_System_RETURN PySpam_System PySpam_System_PROTO; 1314 1315 #else 1316 /* This section is used in modules that use spammodule's API */ 1317 1318 static void **PySpam_API; 1319 1320 #define PySpam_System \ 1321 (*(PySpam_System_RETURN (*)PySpam_System_PROTO) PySpam_API[PySpam_System_NUM]) 1322 1323 /* Return -1 on error, 0 on success. 1324 * PyCapsule_Import will set an exception if there's an error. 1325 */ 1326 static int 1327 import_spam(void) 1328 { 1329 PySpam_API = (void **)PyCapsule_Import("spam._C_API", 0); 1330 return (PySpam_API != NULL) ? 0 : -1; 1331 } 1332 1333 #endif 1334 1335 #ifdef __cplusplus 1336 } 1337 #endif 1338 1339 #endif /* !defined(Py_SPAMMODULE_H) */ 1340 1341All that a client module must do in order to have access to the function 1342:c:func:`PySpam_System` is to call the function (or rather macro) 1343:c:func:`import_spam` in its initialization function:: 1344 1345 PyMODINIT_FUNC 1346 PyInit_client(void) 1347 { 1348 PyObject *m; 1349 1350 m = PyModule_Create(&clientmodule); 1351 if (m == NULL) 1352 return NULL; 1353 if (import_spam() < 0) 1354 return NULL; 1355 /* additional initialization can happen here */ 1356 return m; 1357 } 1358 1359The main disadvantage of this approach is that the file :file:`spammodule.h` is 1360rather complicated. However, the basic structure is the same for each function 1361that is exported, so it has to be learned only once. 1362 1363Finally it should be mentioned that Capsules offer additional functionality, 1364which is especially useful for memory allocation and deallocation of the pointer 1365stored in a Capsule. The details are described in the Python/C API Reference 1366Manual in the section :ref:`capsules` and in the implementation of Capsules (files 1367:file:`Include/pycapsule.h` and :file:`Objects/pycapsule.c` in the Python source 1368code distribution). 1369 1370.. rubric:: Footnotes 1371 1372.. [#] An interface for this function already exists in the standard module :mod:`os` 1373 --- it was chosen as a simple and straightforward example. 1374 1375.. [#] The metaphor of "borrowing" a reference is not completely correct: the owner 1376 still has a copy of the reference. 1377 1378.. [#] Checking that the reference count is at least 1 **does not work** --- the 1379 reference count itself could be in freed memory and may thus be reused for 1380 another object! 1381 1382.. [#] These guarantees don't hold when you use the "old" style calling convention --- 1383 this is still found in much existing code. 1384