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