PEP 587: Clarify relationship with PEP 432 by vstinner · Pull Request #955 · python/peps (original) (raw)
@@ -1,6 +1,6 @@
PEP: 587
Title: Python Initialization Configuration
Author: Victor Stinner vstinner@redhat.com
Author: Nick Coghlan ncoghlan@gmail.com, Victor Stinner vstinner@redhat.com
Discussions-To: python-dev@python.org
Status: Draft
Type: Standards Track
@@ -29,6 +29,12 @@ The C API of Python 3.7 Initialization takes ``wchar_t*`` strings as
input whereas the Python filesystem encoding is set during the
initialization.
This PEP is a partial implementation of PEP 432 which is the overall
design. New fields can be added later to ``PyConfig`` structure to
finish the implementation of the PEP 432 (add a new partial
initialization which allows to configure Python using Python objects to
finish the full initialization).
Python Initialization C API
===========================
@@ -63,6 +69,10 @@ New macros (6):
* ``Py_INIT_EXIT(EXITCODE)``
* ``Py_INIT_FAILED(err)``
This PEP also adds ``_PyRuntimeState.preconfig`` (``PyPreConfig``) and
``PyInterpreterState.config`` (``PyConfig``) fields to these internal
structures. They become the new reference configuration.
PyWideCharList
--------------
@@ -334,7 +344,8 @@ This PEP is still a draft with open questions which should be answered:
* The PEP 432 stores ``PYTHONCASEOK`` into the config. Do we need
to add something for that into ``PyConfig``? How would it be exposed
at the Python level for ``importlib``? Passed as an argument to
``importlib._bootstrap._setup()`` maybe?
``importlib._bootstrap._setup()`` maybe? It can be added later if
needed.
Backwards Compatibility
@@ -344,21 +355,6 @@ This PEP only adds a new API: it leaves the existing API unchanged and
has no impact on the backwards compatibility.
Alternative: PEP 432
====================
This PEP is inspired by Nick Coghlan's PEP 432 with a main difference:
it only allows to configure Python before its initialization.
The PEP 432 uses three initialization phases: Pre-Initialization,
Initializing, Initialized. It is possible to configure Python between
Initializing and Initialized phases using Python objects.
This PEP only uses C types like ``int`` and ``wchar_t*`` (and
``PyWideCharList`` structure). All parameters must be configured at once
before the Python initialization using the ``PyConfig`` structure.
Annex: Python Configuration
===========================