◐ Shell
reader mode source ↗
Skip to content

gh-134160: Start "Extending and embedding" with a Diataxis-style tutorial#142314

Merged
encukou merged 25 commits into
python:mainfrom
encukou:modexport-tutorial
Dec 19, 2025
Merged

gh-134160: Start "Extending and embedding" with a Diataxis-style tutorial#142314
encukou merged 25 commits into
python:mainfrom
encukou:modexport-tutorial

Conversation

@encukou

@encukou encukou commented Dec 5, 2025

Copy link
Copy Markdown
Member

The "Extending and embedding" section of the docs starts with a "tutorial", which is now outdated (it uses soft-deprecated API), but it also doesn't quite work as a tutorial (in the Diátaxis sense).

This PR pulls out the bits needed for a simple extension module: it's as simple as it can get to expose a C function. Topics that need lengthy explanation are left out (this includes crucial ones like refcounting & error handling, put also modern things like ABI info or free-threading support).
The code is updated to modern, non-deprecated API -- specifically, PEP 793's PyModExport.

The remainder of the existing chapter is renamed to "Using the C API: Assorted topics", to mirror the later chapter “Defining Extension Types: Assorted Topics”. This title was somewhat fitting even without the tutorial part taken out.
Care is taken to not remove any information, unless it's duplicated or no longer relevant. An “assorted topics” section works nicely here.

It would be nice to pull more bits out into dedicated explanation or tutorial pages; that's out of scope for this PR.

I apologize for any typos; I found reviewers are much better at finding them than I am (especially after I've been rewriting drafts for days).


📚 Documentation preview 📚: https://cpython-previews--142314.org.readthedocs.build/

encukou and others added 4 commits December 10, 2025 11:32
Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Éric <merwok@netwok.org>
@encukou

encukou commented Dec 10, 2025

Copy link
Copy Markdown
Member Author

I've changed things so the first compilation is after adding #includes. Not finding Python.h headers is a reasonable failure mode, and it makes sense to debug that together with any other tool issues.

35 hidden items Load more…
@encukou

encukou commented Dec 12, 2025

Copy link
Copy Markdown
Member Author

The “now run your build tool” section stood out as the most no-tutorial-i part of the tutorial, so I tried the tools from the PyPA recommendation list and chose the most straightforward one: meson-python.
(It'd be setuptools if it weren't for pypa/distutils#387)

I put notes on using other tools in an appendix.

@ngoldbaum

Copy link
Copy Markdown
Contributor

As a big proponent of meson-python IMO it's a great choice for this.

@ZeroIntensity ZeroIntensity left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hide comment

Yay, thanks for doing this! I'm excited to finally see a better tutorial.

I tried to avoid being overly nitpicky in my review.

14 hidden conversations Load more…
encukou and others added 4 commits December 16, 2025 14:18
Co-authored-by: Daniele Nicolodi <daniele@grinta.net>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>

@ZeroIntensity ZeroIntensity left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hide comment

Mostly just typos left. I left a few minor wording suggestions, so feel free to reject those if you want to.

4 hidden conversations Load more…
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
@encukou

encukou commented Dec 19, 2025

Copy link
Copy Markdown
Member Author

Thank you for those! I must admit I'm blind to typos at this point...

I'll merge soon, but I'm happy to take more suggestions. Docs are never done :)

@ZeroIntensity ZeroIntensity left a comment

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hide comment

I don't have any more complaints, LGTM!

@bedevere-app bedevere-app Bot added and removed awaiting core review labels Dec 19, 2025
Hide details View details @encukou encukou merged commit 049c252 into python:main Dec 19, 2025
32 checks passed
@github-project-automation github-project-automation Bot moved this from Todo to Done in Docs PRs Dec 19, 2025
@encukou encukou deleted the modexport-tutorial branch December 19, 2025 16:48
cocolato pushed a commit to cocolato/cpython that referenced this pull request Dec 22, 2025
…e tutorial (pythonGH-142314)

Co-authored-by: Stan Ulbrych <89152624+StanFromIreland@users.noreply.github.com>
Co-authored-by: Éric <merwok@netwok.org>
Co-authored-by: Daniele Nicolodi <daniele@grinta.net>
Co-authored-by: Peter Bierma <zintensitydev@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

docs Documentation in the Doc dir skip news

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants