Skip to content

Commit d6e4786

Browse files
miss-islingtonvstinnerencukouzooba
authored
[3.13] gh-133678: Document C API third party tools (GH-134526) (#134792)
gh-133678: Document C API third party tools (GH-134526) (cherry picked from commit c3c8806) Co-authored-by: Victor Stinner <[email protected]> Co-authored-by: Petr Viktorin <[email protected]> Co-authored-by: Steve Dower <[email protected]>
1 parent 814ac0d commit d6e4786

File tree

4 files changed

+46
-35
lines changed

4 files changed

+46
-35
lines changed

Doc/c-api/intro.rst

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -834,3 +834,41 @@ after every statement run by the interpreter.)
834834

835835
Please refer to :file:`Misc/SpecialBuilds.txt` in the Python source distribution
836836
for more detailed information.
837+
838+
839+
.. _c-api-tools:
840+
841+
Recommended third party tools
842+
=============================
843+
844+
The following third party tools offer both simpler and more sophisticated
845+
approaches to creating C, C++ and Rust extensions for Python:
846+
847+
* `Cython <https://cython.org/>`_
848+
* `cffi <https://cffi.readthedocs.io>`_
849+
* `HPy <https://hpyproject.org/>`_
850+
* `nanobind <https://github.com/wjakob/nanobind>`_ (C++)
851+
* `Numba <https://numba.pydata.org/>`_
852+
* `pybind11 <https://pybind11.readthedocs.io/>`_ (C++)
853+
* `PyO3 <https://pyo3.rs/>`_ (Rust)
854+
* `SWIG <https://www.swig.org>`_
855+
856+
Using tools such as these can help avoid writing code that is tightly bound to
857+
a particular version of CPython, avoid reference counting errors, and focus
858+
more on your own code than on using the CPython API. In general, new versions
859+
of Python can be supported by updating the tool, and your code will often use
860+
newer and more efficient APIs automatically. Some tools also support compiling
861+
for other implementations of Python from a single set of sources.
862+
863+
These projects are not supported by the same people who maintain Python, and
864+
issues need to be raised with the projects directly. Remember to check that the
865+
project is still maintained and supported, as the list above may become
866+
outdated.
867+
868+
.. seealso::
869+
870+
`Python Packaging User Guide: Binary Extensions <https://packaging.python.org/guides/packaging-binary-extensions/>`_
871+
The Python Packaging User Guide not only covers several available
872+
tools that simplify the creation of binary extensions, but also
873+
discusses the various reasons why creating an extension module may be
874+
desirable in the first place.

Doc/extending/index.rst

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -26,19 +26,9 @@ Recommended third party tools
2626
=============================
2727

2828
This guide only covers the basic tools for creating extensions provided
29-
as part of this version of CPython. Third party tools like
30-
`Cython <https://cython.org/>`_, `cffi <https://cffi.readthedocs.io>`_,
31-
`SWIG <https://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.
34-
35-
.. seealso::
36-
37-
`Python Packaging User Guide: Binary Extensions <https://packaging.python.org/guides/packaging-binary-extensions/>`_
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.
29+
as part of this version of CPython. Some :ref:`third party tools
30+
<c-api-tools>` offer both simpler and more sophisticated approaches to creating
31+
C and C++ extensions for Python.
4232

4333

4434
Creating extensions without third party tools

Doc/faq/extending.rst

Lines changed: 3 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -37,24 +37,9 @@ Writing C is hard; are there any alternatives?
3737
----------------------------------------------
3838

3939
There are a number of alternatives to writing your own C extensions, depending
40-
on what you're trying to do.
41-
42-
.. XXX make sure these all work
43-
44-
`Cython <https://cython.org>`_ and its relative `Pyrex
45-
<https://www.csse.canterbury.ac.nz/greg.ewing/python/Pyrex/>`_ are compilers
46-
that accept a slightly modified form of Python and generate the corresponding
47-
C code. Cython and Pyrex make it possible to write an extension without having
48-
to learn Python's C API.
49-
50-
If you need to interface to some C or C++ library for which no Python extension
51-
currently exists, you can try wrapping the library's data types and functions
52-
with a tool such as `SWIG <https://www.swig.org>`_. `SIP
53-
<https://github.com/Python-SIP/sip>`__, `CXX
54-
<https://cxx.sourceforge.net/>`_ `Boost
55-
<https://www.boost.org/libs/python/doc/index.html>`_, or `Weave
56-
<https://github.com/scipy/weave>`_ are also
57-
alternatives for wrapping C++ libraries.
40+
on what you're trying to do. :ref:`Recommended third party tools <c-api-tools>`
41+
offer both simpler and more sophisticated approaches to creating C and C++
42+
extensions for Python.
5843

5944

6045
How can I execute arbitrary Python statements from C?

Doc/howto/cporting.rst

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -14,13 +14,11 @@ We recommend the following resources for porting extension modules to Python 3:
1414
module.
1515
* The `Porting guide`_ from the *py3c* project provides opinionated
1616
suggestions with supporting code.
17-
* The `Cython`_ and `CFFI`_ libraries offer abstractions over
18-
Python's C API.
17+
* :ref:`Recommended third party tools <c-api-tools>` offer abstractions over
18+
the Python's C API.
1919
Extensions generally need to be re-written to use one of them,
2020
but the library then handles differences between various Python
2121
versions and implementations.
2222

2323
.. _Migrating C extensions: http://python3porting.com/cextensions.html
2424
.. _Porting guide: https://py3c.readthedocs.io/en/latest/guide.html
25-
.. _Cython: https://cython.org/
26-
.. _CFFI: https://cffi.readthedocs.io/en/latest/

0 commit comments

Comments
 (0)