75 lines
2.8 KiB
Plaintext
75 lines
2.8 KiB
Plaintext
|
.. _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
|