protocolbuffers/protobuf

Python: Use multi-phase initialisation (PEP 489)

Open

#21,995 opened on May 28, 2025

View on GitHub
 (3 comments) (0 reactions) (1 assignee)C++ (16,128 forks)batch import
help wantedkeep openpython

Repository metrics

Stars
 (71,223 stars)
PR merge metrics
 (Avg merge 2d 11h) (185 merged PRs in 30d)

Description

What language does this apply to?

Python

Describe the solution you'd like

Hello,

Please consider adopting multi-phase init for your Python extension modules. In short, multi-phase makes extension modules behave more like pure-Python modules and means that the import system can determine what a module supports before executing it.

Multi-phase initialisation was introduced in PEP 489 for Python 3.5. It replaces the previous 'single-phase' mechanism by splitting the module creation process into creation and execution phases. Quoting from the documentation:

Extension modules created this way behave more like Python modules: the initialization is split between the creation phase, when the module object is created, and the execution phase, when it is populated. The distinction is similar to the __new__() and __init__() methods of classes.

It is the preferred mechanism for extension module initialisation, and we are considering explicitly deprecating single phase init.

Describe alternatives you've considered

The status quo.

A

Contributor guide