classification
Title: "distributions can disable the encodings package"
Type: Stage: resolved
Components: Interpreter Core Versions: Python 3.3
process
Status: closed Resolution: fixed
Dependencies: Superseder:
Assigned To: Nosy List: amaury.forgeotdarc, eric.araujo, loewis, pitrou, python-dev, terry.reedy
Priority: low Keywords:

Created on 2012-01-06 20:32 by pitrou, last changed 2012-01-18 21:39 by pitrou. This issue is now closed.

Messages (5)
msg150767 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2012-01-06 20:32
In _PyCodecRegistry_Init() (in Python/codecs.c), it is attempted to import the encodings module (so that the default search function gets registered) and failures get ignored following the same reasoning:

            /* Ignore ImportErrors... this is done so that
               distributions can disable the encodings package. Note
               that other errors are not masked, e.g. SystemErrors
               raised to inform the user of an error in the Python
               configuration are still reported back to the user. */

However, it is unlikely for Python 3 to start up at all without an encodings package (we needs some codecs to initialize stdio). Also, I'm not sure what the point would be. Distributions can simply distribute a dummy encodings module if they really want to disable the default encodings.
Not silencing the error would probably make it easier to diagnose early import issues.
msg150777 - (view) Author: Amaury Forgeot d'Arc (amaury.forgeotdarc) * (Python committer) Date: 2012-01-06 23:23
Agreed.  This behavior probably comes from the times when unicode was an optional feature.
msg151220 - (view) Author: Terry J. Reedy (terry.reedy) * (Python committer) Date: 2012-01-14 03:57
Those lines were whitespace reformed by Antoine in 61466/61463.
They previously came from 28325 which fixed #663074 (2003).
I do not see any discussion in that issue of making the import optional.
I suspect there is no test of Python working with no encodings ;-)

Just for fun, I commented out the import and error checks. There is an error message during the build about python_d.exe not working and python_d.exe crashes (ungracefully) on explicit startup, as you expected. I presume the patch is to delete the entire block added in 28325:
        if (PyErr_ExceptionMatches(PyExc_ImportError)) {
            /* Ignore ImportErrors... this is done so that
               distributions can disable the encodings package. Note
               that other errors are not masked, e.g. SystemErrors
               raised to inform the user of an error in the Python
               configuration are still reported back to the user. */
            PyErr_Clear();
            return 0;

Only in 3.3 or further back? I can do it if you like.
msg151290 - (view) Author: Antoine Pitrou (pitrou) * (Python committer) Date: 2012-01-15 15:44
Actually, that code is from bc861add5d71.
But the error was also muted in the initial checkin in d0e06efb3165.
In any case, the silencing should be removed, both in 3.2 and 3.3 IMO.
msg151569 - (view) Author: Roundup Robot (python-dev) Date: 2012-01-18 21:35
New changeset 46b245f03f54 by Antoine Pitrou in branch '3.2':
Issue #13722: Avoid silencing ImportErrors when initializing the codecs registry.
http://hg.python.org/cpython/rev/46b245f03f54

New changeset f55529aa023d by Antoine Pitrou in branch 'default':
Issue #13722: Avoid silencing ImportErrors when initializing the codecs registry.
http://hg.python.org/cpython/rev/f55529aa023d
History
Date User Action Args
2012-01-18 21:39:29pitrousetstatus: open -> closed
resolution: fixed
stage: needs patch -> resolved
2012-01-18 21:35:47python-devsetnosy: + python-dev
messages: + msg151569
2012-01-15 15:44:39pitrousetmessages: + msg151290
2012-01-14 03:57:20terry.reedysetnosy: + terry.reedy

messages: + msg151220
stage: needs patch
2012-01-14 02:47:05eric.araujosetnosy: + eric.araujo
2012-01-06 23:23:38amaury.forgeotdarcsetmessages: + msg150777
2012-01-06 20:32:22pitroucreate