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

Expand Down Expand Up

@@ -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

===========================

Expand Down Expand Up

@@ -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

--------------

Expand Down Expand Up

@@ -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

Expand All

@@ -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

===========================

Expand Down