| .. _extending-index: |
| |
| ################################################## |
| Extending and Embedding the Python Interpreter |
| ################################################## |
| |
| This document describes how to write modules in C or C++ to extend the Python |
| interpreter with new modules. Those modules can not only define new functions |
| but also new object types and their methods. The document also describes how |
| to embed the Python interpreter in another application, for use as an extension |
| language. Finally, it shows how to compile and link extension modules so that |
| they can be loaded dynamically (at run time) into the interpreter, if the |
| underlying operating system supports this feature. |
| |
| This document assumes basic knowledge about Python. For an informal |
| introduction to the language, see :ref:`tutorial-index`. :ref:`reference-index` |
| gives a more formal definition of the language. :ref:`library-index` documents |
| the existing object types, functions and modules (both built-in and written in |
| Python) that give the language its wide application range. |
| |
| For a detailed description of the whole Python/C API, see the separate |
| :ref:`c-api-index`. |
| |
| |
| Recommended third party tools |
| ============================= |
| |
| This guide only covers the basic tools for creating extensions provided |
| as part of this version of CPython. Third party tools like |
| `Cython <http://cython.org/>`_, `cffi <https://cffi.readthedocs.io>`_, |
| `SWIG <http://www.swig.org>`_ and `Numba <https://numba.pydata.org/>`_ |
| offer both simpler and more sophisticated approaches to creating C and C++ |
| extensions for Python. |
| |
| .. seealso:: |
| |
| `Python Packaging User Guide: Binary Extensions <https://packaging.python.org/guides/packaging-binary-extensions/>`_ |
| The Python Packaging User Guide not only covers several available |
| tools that simplify the creation of binary extensions, but also |
| discusses the various reasons why creating an extension module may be |
| desirable in the first place. |
| |
| |
| Creating extensions without third party tools |
| ============================================= |
| |
| This section of the guide covers creating C and C++ extensions without |
| assistance from third party tools. It is intended primarily for creators |
| of those tools, rather than being a recommended way to create your own |
| C extensions. |
| |
| .. toctree:: |
| :maxdepth: 2 |
| :numbered: |
| |
| extending.rst |
| newtypes_tutorial.rst |
| newtypes.rst |
| building.rst |
| windows.rst |
| |
| Embedding the CPython runtime in a larger application |
| ===================================================== |
| |
| Sometimes, rather than creating an extension that runs inside the Python |
| interpreter as the main application, it is desirable to instead embed |
| the CPython runtime inside a larger application. This section covers |
| some of the details involved in doing that successfully. |
| |
| .. toctree:: |
| :maxdepth: 2 |
| :numbered: |
| |
| embedding.rst |