Implement PEP 793 – PyModExport
Personne n'a encore pris cette issue.
- Langage dominant
- Python
- Étoiles
- 77.2k
- Forks
- 36k
- Métriques de merge des PR
- Métriques de PR en attente
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_Slotstructures without an enclosingPyModuleDefstructure. This allows extension authors to avoid using a statically allocatedPyObject, lifting the most common obstacle to making one compiled library file usable with both regular and free-threaded builds of CPython.To make this viable, we also specify new module slot types to replace
PyModuleDef’s fields, and to allow adding a token similar to thePy_tp_tokenused for type objects.We also add an API for defining modules from slots dynamically.
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.)
- Initial implementation (#140556)
- Docs:
- Reference docs (#141197)
- Soft-deprecate
PyInit_*(#141197) - Better explanation of module state (#141197)
- Give an example for tokens (#141197)
- Soft-deprecate
- What's New
-
a notice for(edit: This shouldn't have changed/broken more than usual.)DYNLOADFILEusers?
-
- Porting guide HOWTO
- Document that the export hook runs without GIL in FT builds (see
#141780) (#151661)
- Document that the export hook runs without GIL in FT builds (see
- Tutorial update (#142314)
- Mentions in
PyImport_AppendInittab& friends (#151661) - Make sure references to new API are linked:
-
PyMod_ExecinPyImport_CreateModuleFromInitfuncdocs is linked (#141197) -
PyMODEXPORT_FUNCin blurb for#141672 -
blurb for#141780
-
- Reference docs (#141197)
-
xxlimited.cupdate (#142827)- Remove/replace
_Py_OPAQUE_PYOBJECTinxxlimited.c(by 3.15.0 beta)
- Remove/replace
Optional stretch goals:
- Remove the
PyInitfunction fromLib/test/test_cext/extension.c(https://github.com/python/cpython/pull/141511) - Speed & size improvements
-
importdl: load the DLL once -
boolfor the GIL flag (#141519)
-
- No longer require
spec.nameinPyModule_FromSlotsAndSpec - No longer require static allocation for
Py_mod_methods - Add a
PyModule_GetStateWithToken()function
Has this already been discussed elsewhere?
No response given
Links to previous discussion of this feature:
No response
Linked PRs
- gh-140556
- gh-141056
- gh-141197
- gh-141511
- gh-141519
- gh-142583
- gh-142827
- gh-144340
- gh-149397
- gh-149785
- gh-151661
- gh-152064
- gh-157493
- gh-157494
- gh-157539
- gh-157560
See also:
- gh-141672
- gh-142314
Guide de contribution
Ouvrir le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Piste de recherche
Examinez la proposition PEP 793 et les stretch goals encore non cochés, en particulier Lib/test/test_cext/extension.c et l’élément importdl. Commencez par vérifier le travail d’implémentation et de documentation lié, puis identifiez un objectif restant précis ainsi que ses tests ou points d’entrée existants ; le travail est considéré comme terminé lorsque cet objectif est implémenté et couvert par la documentation ou les tests pertinents.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Évaluation
- Stack technique
- c, python
- Domaine
- backend-api-design
- Type d'issue
- Fonctionnalité
- Difficulté
- 5/5
- Temps estimé
- Plus d'une semaine
- Activité
- À l'abandon
- Clarté
- À clarifier
- Accessibilité débutants
- 20/100