Title: Implement PEP 793 – PyModExport · Issue #140550 · python/cpython · GitHub
Open Graph Title: Implement PEP 793 – PyModExport · Issue #140550 · python/cpython
X Title: Implement PEP 793 – PyModExport · Issue #140550 · python/cpython
Description: Feature or enhancement Proposal: See PEP 793. I'll copy the abstract for reference: In this PEP, we propose a new entry point for C extension modules, by which one can define a module using an array of PyModuleDef_Slot structures without...
Open Graph Description: Feature or enhancement Proposal: See PEP 793. I'll copy the abstract for reference: In this PEP, we propose a new entry point for C extension modules, by which one can define a module using an arra...
X Description: Feature or enhancement Proposal: See PEP 793. I'll copy the abstract for reference: In this PEP, we propose a new entry point for C extension modules, by which one can define a module using an ...
Opengraph URL: https://github.com/python/cpython/issues/140550
X: @github
Domain: github.com
{"@context":"https://schema.org","@type":"DiscussionForumPosting","headline":"Implement PEP 793 – PyModExport","articleBody":"# Feature or enhancement\n\n### Proposal:\n\nSee [PEP 793](https://peps.python.org/pep-0793/). I'll copy the abstract for reference:\n\n\u003e In this PEP, we propose a new entry point for C extension modules, by which one can define a module using an array of `PyModuleDef_Slot` structures without an enclosing `PyModuleDef` structure. This allows extension authors to avoid using a statically allocated `PyObject`, lifting the most common obstacle to making one compiled library file usable with both regular and free-threaded builds of CPython.\n\u003e \n\u003e To make this viable, we also specify new module slot types to replace `PyModuleDef`’s fields, and to allow adding a token similar to the `Py_tp_token` used for type objects.\n\u003e\n\u003e We also add an API for defining modules from slots dynamically.\n\u003e\n\u003e The existing API (`PyInit_*`) is soft-deprecated. (That is: it will continue to work without warnings, and it’ll be fully documented and supported, but we plan to not add any new features to it.)\n\n---\n\n* [x] Initial implementation (#140556)\n* [ ] Docs:\n * [x] Reference docs (#141197)\n * [x] Soft-deprecate `PyInit_*` (#141197)\n * [x] Better explanation of module state (#141197)\n * [x] Give an example for tokens (#141197)\n * [ ] What's New\n * [ ] a notice for `DYNLOADFILE` users\n * [ ] Porting guide HOWTO\n * [ ] Document that the export hook runs without GIL in FT builds (see `#141780`) \n * [x] Tutorial update (#142314)\n * [ ] Mentions in `PyImport_AppendInittab` \u0026 friends\n * [ ] Make sure references to new API are linked:\n * [x] `PyMod_Exec`in `PyImport_CreateModuleFromInitfunc` docs is linked (#141197)\n * [ ] `PyMODEXPORT_FUNC` in blurb for `#141672`\n * [ ] blurb for `#141780`\n* [ ] `xxlimited.c` update (#142827)\n * [ ] Remove/replace `_Py_OPAQUE_PYOBJECT` in `xxlimited.c` (by 3.15.0 beta)\n\nOptional stretch goals:\n\n* [ ] Remove the `PyInit` function from `Lib/test/test_cext/extension.c` (https://github.com/python/cpython/pull/141511)\n* [ ] Speed \u0026 size improvements\n * [ ] `importdl`: load the DLL once\n * [x] `bool` for the GIL flag (#141519)\n* [ ] No longer require `spec.name` in `PyModule_FromSlotsAndSpec`\n* [ ] No longer require static allocation for `Py_mod_methods`\n* [ ] Add a `PyModule_GetStateWithToken()` function\n\n### Has this already been discussed elsewhere?\n\nNo response given\n\n### Links to previous discussion of this feature:\n\n_No response_\n\n\u003c!-- gh-linked-prs --\u003e\n### Linked PRs\n* gh-140556\n* gh-141056\n* gh-141197\n* gh-141511\n* gh-141519\n* gh-142583\n* gh-142827\n\u003c!-- /gh-linked-prs --\u003e\n\nSee also:\n* gh-141672\n* gh-142314","author":{"url":"https://github.com/encukou","@type":"Person","name":"encukou"},"datePublished":"2025-10-24T14:40:10.000Z","interactionStatistic":{"@type":"InteractionCounter","interactionType":"https://schema.org/CommentAction","userInteractionCount":1},"url":"https://github.com/140550/cpython/issues/140550"}
| route-pattern | /_view_fragments/issues/show/:user_id/:repository/:id/issue_layout(.:format) |
| route-controller | voltron_issues_fragments |
| route-action | issue_layout |
| fetch-nonce | v2:8b681bc3-e057-7c3d-7eec-a81d26f913e9 |
| current-catalog-service-hash | 81bb79d38c15960b92d99bca9288a9108c7a47b18f2423d0f6438c5b7bcd2114 |
| request-id | A26C:1B7E6F:1C8348B:2739048:696AAC2F |
| html-safe-nonce | 8e3e5339b32b39924f39243b11593e53eee872290b82f60a5916a00c057c7431 |
| visitor-payload | eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBMjZDOjFCN0U2RjoxQzgzNDhCOjI3MzkwNDg6Njk2QUFDMkYiLCJ2aXNpdG9yX2lkIjoiMzc3NjYwOTI4ODI0NzIyNTM5MSIsInJlZ2lvbl9lZGdlIjoiaWFkIiwicmVnaW9uX3JlbmRlciI6ImlhZCJ9 |
| visitor-hmac | f3715a29c73db489a2ff273240d72fe676ab5a9b4e21399cc287c8c0e93d399d |
| hovercard-subject-tag | issue:3549814087 |
| github-keyboard-shortcuts | repository,issues,copilot |
| google-site-verification | Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I |
| octolytics-url | https://collector.github.com/github/collect |
| analytics-location | / |
| fb:app_id | 1401488693436528 |
| apple-itunes-app | app-id=1477376905, app-argument=https://github.com/_view_fragments/issues/show/python/cpython/140550/issue_layout |
| twitter:image | https://opengraph.githubassets.com/b78f1292567caa131064ceb297f76c978080406fc33126c2af55dede5dff2ba9/python/cpython/issues/140550 |
| twitter:card | summary_large_image |
| og:image | https://opengraph.githubassets.com/b78f1292567caa131064ceb297f76c978080406fc33126c2af55dede5dff2ba9/python/cpython/issues/140550 |
| og:image:alt | Feature or enhancement Proposal: See PEP 793. I'll copy the abstract for reference: In this PEP, we propose a new entry point for C extension modules, by which one can define a module using an arra... |
| og:image:width | 1200 |
| og:image:height | 600 |
| og:site_name | GitHub |
| og:type | object |
| og:author:username | encukou |
| hostname | github.com |
| expected-hostname | github.com |
| None | 3eaf9b8cf1badcd7041a8ad480b9d9b28bea0ef1cc821ca9ff20f2cc7f4fe4b9 |
| turbo-cache-control | no-preview |
| go-import | github.com/python/cpython git https://github.com/python/cpython.git |
| octolytics-dimension-user_id | 1525981 |
| octolytics-dimension-user_login | python |
| octolytics-dimension-repository_id | 81598961 |
| octolytics-dimension-repository_nwo | python/cpython |
| octolytics-dimension-repository_public | true |
| octolytics-dimension-repository_is_fork | false |
| octolytics-dimension-repository_network_root_id | 81598961 |
| octolytics-dimension-repository_network_root_nwo | python/cpython |
| turbo-body-classes | logged-out env-production page-responsive |
| disable-turbo | false |
| browser-stats-url | https://api.github.com/_private/browser/stats |
| browser-errors-url | https://api.github.com/_private/browser/errors |
| release | dd9a979046e6382bd084e2bd873bf65f797125ff |
| ui-target | full |
| theme-color | #1e2327 |
| color-scheme | light dark |
Links:
Viewport: width=device-width