Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 1 | .. _extending-index: |
| 2 | |
| 3 | ################################################## |
| 4 | Extending and Embedding the Python Interpreter |
| 5 | ################################################## |
| 6 | |
Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 7 | This document describes how to write modules in C or C++ to extend the Python |
Georg Brandl | 7d07833 | 2013-10-06 18:36:34 +0200 | [diff] [blame] | 8 | interpreter with new modules. Those modules can not only define new functions |
| 9 | but also new object types and their methods. The document also describes how |
| 10 | to embed the Python interpreter in another application, for use as an extension |
| 11 | language. Finally, it shows how to compile and link extension modules so that |
| 12 | they can be loaded dynamically (at run time) into the interpreter, if the |
| 13 | underlying operating system supports this feature. |
Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 14 | |
| 15 | This document assumes basic knowledge about Python. For an informal |
| 16 | introduction to the language, see :ref:`tutorial-index`. :ref:`reference-index` |
| 17 | gives a more formal definition of the language. :ref:`library-index` documents |
| 18 | the existing object types, functions and modules (both built-in and written in |
| 19 | Python) that give the language its wide application range. |
| 20 | |
| 21 | For a detailed description of the whole Python/C API, see the separate |
| 22 | :ref:`c-api-index`. |
| 23 | |
Nick Coghlan | b5c4fd0 | 2013-12-10 21:24:55 +1000 | [diff] [blame] | 24 | |
Nick Coghlan | f7614d5 | 2014-03-13 22:13:45 +1000 | [diff] [blame] | 25 | Recommended third party tools |
| 26 | ============================= |
Nick Coghlan | b5c4fd0 | 2013-12-10 21:24:55 +1000 | [diff] [blame] | 27 | |
Nick Coghlan | f7614d5 | 2014-03-13 22:13:45 +1000 | [diff] [blame] | 28 | This guide only covers the basic tools for creating extensions provided |
Antoine Pitrou | 1d80a56 | 2018-04-07 18:14:03 +0200 | [diff] [blame] | 29 | as part of this version of CPython. Third party tools like |
| 30 | `Cython <http://cython.org/>`_, `cffi <https://cffi.readthedocs.io>`_, |
| 31 | `SWIG <http://www.swig.org>`_ and `Numba <https://numba.pydata.org/>`_ |
| 32 | offer both simpler and more sophisticated approaches to creating C and C++ |
| 33 | extensions for Python. |
Nick Coghlan | f7614d5 | 2014-03-13 22:13:45 +1000 | [diff] [blame] | 34 | |
| 35 | .. seealso:: |
| 36 | |
Sanyam Khurana | 338cd83 | 2018-01-20 05:55:37 +0530 | [diff] [blame] | 37 | `Python Packaging User Guide: Binary Extensions <https://packaging.python.org/guides/packaging-binary-extensions/>`_ |
Nick Coghlan | f7614d5 | 2014-03-13 22:13:45 +1000 | [diff] [blame] | 38 | The Python Packaging User Guide not only covers several available |
| 39 | tools that simplify the creation of binary extensions, but also |
| 40 | discusses the various reasons why creating an extension module may be |
| 41 | desirable in the first place. |
| 42 | |
| 43 | |
| 44 | Creating extensions without third party tools |
| 45 | ============================================= |
| 46 | |
| 47 | This section of the guide covers creating C and C++ extensions without |
| 48 | assistance from third party tools. It is intended primarily for creators |
| 49 | of those tools, rather than being a recommended way to create your own |
| 50 | C extensions. |
Nick Coghlan | b5c4fd0 | 2013-12-10 21:24:55 +1000 | [diff] [blame] | 51 | |
Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 52 | .. toctree:: |
| 53 | :maxdepth: 2 |
Benjamin Peterson | 5879d41 | 2009-03-30 14:51:56 +0000 | [diff] [blame] | 54 | :numbered: |
Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 55 | |
| 56 | extending.rst |
Antoine Pitrou | 1d80a56 | 2018-04-07 18:14:03 +0200 | [diff] [blame] | 57 | newtypes_tutorial.rst |
Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 58 | newtypes.rst |
| 59 | building.rst |
| 60 | windows.rst |
Nick Coghlan | f7614d5 | 2014-03-13 22:13:45 +1000 | [diff] [blame] | 61 | |
| 62 | Embedding the CPython runtime in a larger application |
| 63 | ===================================================== |
| 64 | |
| 65 | Sometimes, rather than creating an extension that runs inside the Python |
| 66 | interpreter as the main application, it is desirable to instead embed |
| 67 | the CPython runtime inside a larger application. This section covers |
| 68 | some of the details involved in doing that successfully. |
| 69 | |
| 70 | .. toctree:: |
| 71 | :maxdepth: 2 |
| 72 | :numbered: |
| 73 | |
Georg Brandl | 116aa62 | 2007-08-15 14:28:22 +0000 | [diff] [blame] | 74 | embedding.rst |