Skip to content

collections: remove deprecated aliases to ABC classes #81505

Description

@vstinner
BPO 37324
Nosy @vstinner, @serhiy-storchaka, @yan12125, @hugovk, @tirkarthi
PRs
  • bpo-37324: Remove ABC aliases from collections #14171
  • bpo-37324: Remove ABC aliases from collections #23754
  • Superseder
  • bpo-25988: collections.abc.Indexable
  • 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:

    assignee = None
    closed_at = <Date 2019-10-07.13:20:44.080>
    created_at = <Date 2019-06-17.20:38:32.149>
    labels = ['library', '3.9']
    title = 'collections: remove deprecated aliases to ABC classes'
    updated_at = <Date 2021-01-12.23:16:45.583>
    user = 'https://github.com/vstinner'

    bugs.python.org fields:

    activity = <Date 2021-01-12.23:16:45.583>
    actor = 'vstinner'
    assignee = 'none'
    closed = True
    closed_date = <Date 2019-10-07.13:20:44.080>
    closer = 'serhiy.storchaka'
    components = ['Library (Lib)']
    creation = <Date 2019-06-17.20:38:32.149>
    creator = 'vstinner'
    dependencies = []
    files = []
    hgrepos = []
    issue_num = 37324
    keywords = ['patch']
    message_count = 8.0
    messages = ['345905', '345906', '345908', '345923', '348011', '348424', '354092', '384981']
    nosy_count = 5.0
    nosy_names = ['vstinner', 'serhiy.storchaka', 'yan12125', 'hugovk', 'xtreak']
    pr_nums = ['14171', '23754']
    priority = 'normal'
    resolution = 'duplicate'
    stage = 'resolved'
    status = 'closed'
    superseder = '25988'
    type = None
    url = 'https://bugs.python.org/issue37324'
    versions = ['Python 3.9']

    Activity

    1. vstinner commented on Jun 17, 2019

      @vstinner
      MemberAuthor

      Extract of collections documentation:
      https://docs.python.org/dev/library/collections.html

      "Deprecated since version 3.3, will be removed in version 3.9: Moved Collections Abstract Base Classes to the collections.abc module. For backwards compatibility, they continue to be visible in this module through Python 3.8."

      Attached PR removes these aliases.

    2. added
      stdlibStandard Library Python modules in the Lib/ directory
      on Jun 17, 2019
    3. vstinner commented on Jun 17, 2019

      @vstinner
      MemberAuthor

      pip is broken by this change, causing test_venv to fail: html5lib still uses collections to get ABC.

      FAIL: test_with_pip (test.test_venv.EnsurePipTest)
      ----------------------------------------------------------------------

      Traceback (most recent call last):
        File "/home/vstinner/prog/python/master/Lib/test/test_venv.py", line 407, in do_test_with_pip
          self.run_with_capture(venv.create, self.env_dir,
        File "/home/vstinner/prog/python/master/Lib/test/test_venv.py", line 69, in run_with_capture
          func(*args, **kwargs)
      subprocess.CalledProcessError: Command '['/tmp/tmpkxga42lx/bin/python', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
      
      During handling of the above exception, another exception occurred:
      
      Traceback (most recent call last):
        File "/home/vstinner/prog/python/master/Lib/test/test_venv.py", line 466, in test_with_pip
          self.do_test_with_pip(False)
        File "/home/vstinner/prog/python/master/Lib/test/test_venv.py", line 415, in do_test_with_pip
          self.fail(msg.format(exc, details))
      AssertionError: Command '['/tmp/tmpkxga42lx/bin/python', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exit status 1.
      
      **Subprocess Output**
      /tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/pyparsing.py:3068: SyntaxWarning: invalid escape sequence \w
      /tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/pyparsing.py:3068: SyntaxWarning: invalid escape sequence \w
      Traceback (most recent call last):
        File "/home/vstinner/prog/python/master/Lib/runpy.py", line 192, in _run_module_as_main
          return _run_code(code, main_globals, None,
        File "/home/vstinner/prog/python/master/Lib/runpy.py", line 85, in _run_code
          exec(code, run_globals)
        File "/home/vstinner/prog/python/master/Lib/ensurepip/__main__.py", line 5, in <module>
          sys.exit(ensurepip._main())
        File "/home/vstinner/prog/python/master/Lib/ensurepip/__init__.py", line 198, in _main
          return _bootstrap(
        File "/home/vstinner/prog/python/master/Lib/ensurepip/__init__.py", line 117, in _bootstrap
          return _run_pip(args + [p[0] for p in _PROJECTS], additional_paths)
        File "/home/vstinner/prog/python/master/Lib/ensurepip/__init__.py", line 27, in _run_pip
          import pip._internal
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/__init__.py", line 40, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/autocompletion.py", line 8, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/main_parser.py", line 12, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/__init__.py", line 6, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/commands/completion.py", line 6, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/cli/base_command.py", line 25, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_internal/index.py", line 14, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/html5lib/__init__.py", line 25, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/html5lib/html5parser.py", line 8, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/html5lib/_tokenizer.py", line 16, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/html5lib/_trie/__init__.py", line 3, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/html5lib/_trie/py.py", line 6, in <module>
        File "<frozen zipimport>", line 259, in load_module
        File "/tmp/tmpwhk_ss_e/pip-19.0.3-py2.py3-none-any.whl/pip/_vendor/html5lib/_trie/_base.py", line 3, in <module>
      ImportError: cannot import name 'Mapping' from 'collections' (/home/vstinner/prog/python/master/Lib/collections/__init__.py)
    4. vstinner commented on Jun 17, 2019

      @vstinner
      MemberAuthor

      html5lib has already been fixed:
      https://github.com/vstinner/html5lib-python/commit/4f9235752cea29c5a31721440578b430823a1e69

      But latest html5lib release was version 1.0.1 at... Dec 7, 2017 :-(

      Paul Ganssle requested a new html5lib release... to fix the collections warning :-)
      html5lib/html5lib-python#419

    5. vstinner commented on Jun 17, 2019

      @vstinner
      MemberAuthor

      Oh. I wasn't aware of the previous attempt: #10596 there is a long discussion there. The blocker issue was also html5lib.

    6. vstinner commented on Jul 16, 2019

      @vstinner
      MemberAuthor

      Right now (pip 19.1.1?), "./python -m venv env" still fails because of html5lib/_trie/py.py. There is still no activitiy on the request to get a new release:
      html5lib/html5lib-python#419

    7. yan12125 commented on Jul 25, 2019

      yan12125mannequin
      Mannequin

      In CPython commit 5380def, bundled pip is updated to 19.2.1, and since pip 19.2 an html5lib patch is backported [1] to "prefer importing from collections.abc instead of collections" [2]. I believe #10596 can be revisited now.

      [1] pypa/pip@ef7ca14
      [2] pypa/pip@3d6bb3a

    8. tirkarthi commented on Oct 7, 2019

      @tirkarthi
      Member

      I think this can be closed since https://bugs.python.org/issue25988 has the PR merged.

    9. vstinner commented on Jan 12, 2021

      @vstinner
      MemberAuthor

      New changeset c47c78b by Hugo van Kemenade in branch 'master':
      bpo-37324: Remove ABC aliases from collections (GH-23754)
      c47c78b

    10. transferred this issue fromon Apr 10, 2022
    11. vivainio commented on Nov 10, 2022

      @vivainio

      This broke setuptools 38.5.2

    12. hugovk commented on Nov 10, 2022

      @hugovk
      Member

      setuptools 38.5.2 was released in 2018.

      Python 3.10 was released on 2021-10-04, when setuptools was at 58.2.0, and is now at 65.5.1.

      I recommend upgrading.

    13. vivainio commented on Nov 10, 2022

      @vivainio

      @hugovk I was pinned to old version because newer setuptools created metadata that was incompatible with old version of Artifactory

    14. vstinner commented on Nov 10, 2022

      @vstinner
      MemberAuthor

      Well, if you start to pin versions, you should also pin the Python version: use Python 3.9 or older, which still provide deprecated aliases to collections ABC.

    15. vivainio commented on Nov 11, 2022

      @vivainio

      @vstinner that's what we are doing, but we are now evaluating updating to python 3.10 and this (soft) blocker came up

    16. vivainio commented on Nov 11, 2022

      @vivainio

      For posteriority, I packaged up the compatibility shims to a python package in pypi: https://github.com/vivainio/fix-py-collections

    17. vstinner commented on Nov 12, 2022

      @vstinner
      MemberAuthor

      For posteriority, I packaged up the compatibility shims to a python package in pypi: https://github.com/vivainio/fix-py-collections

      I proposed https://peps.python.org/pep-0606/ but it got rejected.

    18. vivainio commented on Nov 14, 2022

      @vivainio

      I proposed https://peps.python.org/pep-0606/ but it got rejected.

      If there are a lot of breaking changes like this, maybe they could be addressed with a single "compat" package like six. I don't mind if it's a third party package, really.

      Edit: I changed my mind. Third party package works very badly with setuptools, as you would need it available before running setup.py. This should come with Python

    19. added a commit that references this issue on May 5, 2023
    20. added a commit that references this issue on Jul 27, 2023
    Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

    Metadata

    Metadata

    Assignees

    No one assigned

      Labels

      3.9 (EOL)end of lifestdlibStandard Library Python modules in the Lib/ directory

      Projects

      No projects

        Milestone

        No milestone

        Relationships

        None yet

        Development

        No branches or pull requests

        Issue actions