Implement PEP 793 – PyModExport
Nessuno ha ancora preso questa issue.
- Lingua principale
- Python
- Stelle
- 77.2k
- Fork
- 35.9k
- Metriche di merge delle PR
- Metriche PR in attesa
Descrizione
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
Guida per i contributori
Apri la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Direzione di ricerca
Esamina la proposta PEP 793 e gli stretch goal ancora non spuntati, in particolare Lib/test/test_cext/extension.c e l’elemento importdl. Inizia controllando il lavoro di implementazione e documentazione collegato, quindi identifica un obiettivo rimanente specifico e i relativi test o punti di ingresso esistenti; il lavoro è completato quando tale obiettivo è implementato e coperto dalla documentazione o dai test pertinenti.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Valutazione
- Stack tecnologico
- c, python
- Ambito
- backend-api-design
- Tipo di issue
- Funzionalità
- Difficoltà
- 5/5
- Tempo stimato
- Più di una settimana
- Stato di attività
- Ferma
- Chiarezza
- Da chiarire
- Idoneità per principianti
- 20/100