Keep deprecated features in Python 3.9 to ease migration from Python 2.7, but remove in Python 3.10 #83855
Note: these values reflect the state of the issue at the time it was migrated and might not reflect the current state.
Show more details
assignee = None closed_at = <Date 2020-04-23.23:04:03.240> created_at = <Date 2020-02-18.11:26:29.040> labels = ['3.10', 'expert-unicode'] title = 'Keep deprecated features in Python 3.9 to ease migration from Python 2.7, but remove in Python 3.10' updated_at = <Date 2021-04-08.23:29:27.595> user = 'https://github.com/vstinner'
activity = <Date 2021-04-08.23:29:27.595> actor = 'vstinner' assignee = 'none' closed = True closed_date = <Date 2020-04-23.23:04:03.240> closer = 'vstinner' components = ['Unicode'] creation = <Date 2020-02-18.11:26:29.040> creator = 'vstinner' dependencies =  files =  hgrepos =  issue_num = 39674 keywords = ['patch'] message_count = 13.0 messages = ['362196', '362220', '362222', '362225', '363195', '363263', '363276', '363277', '363308', '363350', '363367', '367159', '390571'] nosy_count = 6.0 nosy_names = ['gvanrossum', 'vstinner', 'ezio.melotti', 'python-dev', 'jmadden', 'xtreak'] pr_nums = ['18545', '18552', '18747', '18748', '18767', '18776', '25280', '25281'] priority = 'normal' resolution = 'fixed' stage = 'resolved' status = 'closed' superseder = None type = None url = 'https://bugs.python.org/issue39674' versions = ['Python 3.10']
The text was updated successfully, but these errors were encountered:
Following discussion on python-dev, I propose to revert the removal of a few deprecated functions to keep them in Python 3.9, and only remove them in Python 3.10. Please see the following email for the longer rationale, and the discussion for further details:
With Python 3.8, it was possible to have a single code base working on Python 2.7 and 3.8. Some functions emits DeprecationWarning, but these warnings are ignored (silent) by default. With removed deprecated functions in Python 3.9, *new* code is required to support Python 2.7. The problem is that Python 2.7 is no longer supported. Adding new code to support Python 2.7 sounds painful. Dropping Python 2.7 support isn't free. Projects have to drop Python 2 code, drop CI tests on Python 2, warn users, etc.
The idea is to give maintainers one more year (until Python 3.10) to organize their project to schedule properly the removal of Python 2 support. The first motivation is to ease adoption of Python 3.9.
I propose to start with reverting the removal of collections aliases to Abstract Base Classes (ABC) like collections.Mapping alias to collections.abc.Mapping. Removing these aliases is the change which caused most issues when testing Python projects on Python 3.9.
I also propose to modify the What's New In Python 3.9 document to strongly suggest to test your applications with -W default or even -W error to see DeprecationWarning and PendingDeprecationWarning.
Removing "U" mode of open() broke 11 packages in Fedora:
Keeping "U" mode in Python 3.9 is also a formal request from Andrew Bartlett of the Samba project: https://bugs.python.org/issue37330#msg362362