python / cpython

The Python programming language
https://www.python.org
Other
63.49k stars 30.4k forks source link

Keep deprecated features in Python 3.9 to ease migration from Python 2.7, but remove in Python 3.10 #83855

Closed vstinner closed 4 years ago

vstinner commented 4 years ago
BPO 39674
Nosy @gvanrossum, @vstinner, @ezio-melotti, @jamadden, @tirkarthi
PRs
  • python/cpython#18545
  • python/cpython#18552
  • python/cpython#18747
  • python/cpython#18748
  • python/cpython#18767
  • python/cpython#18776
  • python/cpython#25280
  • python/cpython#25281
  • 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

    GitHub fields: ```python assignee = None closed_at = created_at = 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 = user = 'https://github.com/vstinner' ``` bugs.python.org fields: ```python activity = actor = 'vstinner' assignee = 'none' closed = True closed_date = closer = 'vstinner' components = ['Unicode'] creation = 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'] ```

    vstinner commented 4 years ago

    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:

    https://mail.python.org/archives/list/python-dev@python.org/thread/EYLXCGGJOUMZSE5X35ILW3UNTJM3MCRE/

    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.

    gvanrossum commented 4 years ago

    Yes please.

    I have one exception. I f we manage to get the new parser (pegen) in, we have to remove the old parser module.

    vstinner commented 4 years ago

    New changeset af5ee3ff610377ef446c2d88bbfcbb3dffaaf0c9 by Victor Stinner in branch 'master': bpo-39674: Revert "bpo-25988: Do not expose abstract collection classes in the collections module. (GH-10596)" (GH-18545) https://github.com/python/cpython/commit/af5ee3ff610377ef446c2d88bbfcbb3dffaaf0c9

    vstinner commented 4 years ago

    PR 18552 adds a section to What's New In Python 3.9 to strongly advice to check for DeprecationWarning in your Python projects.

    vstinner commented 4 years ago

    Andrew Bartlett of the Samba project asked to revert the removal of the "U" mode: https://bugs.python.org/issue37330#msg362362

    We should consider to revert the removal, and only remove the "U" mode in Python 3.10.

    vstinner commented 4 years ago

    Another candidate is to revert the ignored "U" mode in open(): commit e471e72977c83664f13d041c78549140c86c92de of bpo-37330.

    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

    vstinner commented 4 years ago

    New changeset 91fe4142642286b65c166f7b6e27de16f42b1286 by Victor Stinner in branch 'master': bpo-39674: Update collections ABC deprecation doc (GH-18747) https://github.com/python/cpython/commit/91fe4142642286b65c166f7b6e27de16f42b1286

    vstinner commented 4 years ago

    New changeset 2aa694dd55202eb6d062fdf49c07cf95f8520f2d by Victor Stinner in branch '3.8': bpo-39674: Update collections ABC deprecation doc (GH-18748) https://github.com/python/cpython/commit/2aa694dd55202eb6d062fdf49c07cf95f8520f2d

    vstinner commented 4 years ago

    New changeset 116fd4af7370706d0d99ac7c70541ef965672d4e by Victor Stinner in branch 'master': bpo-39674: Suggest to test with DeprecationWarning (GH-18552) https://github.com/python/cpython/commit/116fd4af7370706d0d99ac7c70541ef965672d4e

    vstinner commented 4 years ago

    New changeset a6d3546d003d9873de0f71b319ad79d203374bf0 by Victor Stinner in branch 'master': bpo-39674: Fix typo in What's New In Python 3.9 (GH-18776) https://github.com/python/cpython/commit/a6d3546d003d9873de0f71b319ad79d203374bf0

    vstinner commented 4 years ago

    New changeset 942f7a2dea2e95a0fa848329565c0d0288d92e47 by Victor Stinner in branch 'master': bpo-39674: Revert "bpo-37330: open() no longer accept 'U' in file mode (GH-16959)" (GH-18767) https://github.com/python/cpython/commit/942f7a2dea2e95a0fa848329565c0d0288d92e47

    vstinner commented 4 years ago

    I close this issue.

    So far, it seems like the number of incompatible changes in Python 3.9 is reasonable. If more incompatible changes should be reverted, I suggest to open new issues.

    vstinner commented 3 years ago

    New changeset 20d56bd41b56023ce9fa3739c0c9aa8be8d48bfa by Markus Gerstel in branch '3.8': bpo-39674: Fix collections ABC deprecation notice (GH-25281) https://github.com/python/cpython/commit/20d56bd41b56023ce9fa3739c0c9aa8be8d48bfa