You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
collections: remove deprecated aliases to ABC classes #81505
"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."
Traceback (most recent call last):
File "/home/vstinner/prog/python/master/Lib/test/test_venv.py", line 407, in do_test_with_pipself.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_pipself.do_test_with_pip(False)
File "/home/vstinner/prog/python/master/Lib/test/test_venv.py", line 415, in do_test_with_pipself.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_mainreturn _run_code(code, main_globals, None,
File "/home/vstinner/prog/python/master/Lib/runpy.py", line 85, in _run_codeexec(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 _mainreturn _bootstrap(
File "/home/vstinner/prog/python/master/Lib/ensurepip/__init__.py", line 117, in _bootstrapreturn _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_pipimport 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)
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
yan12125 commented on Jul 25, 2019
yan12125mannequin
Mannequin
More actions
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.
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.
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
Activity
vstinner commentedon Jun 17, 2019
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.
vstinner commentedon Jun 17, 2019
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)
----------------------------------------------------------------------
vstinner commentedon Jun 17, 2019
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
vstinner commentedon Jun 17, 2019
Oh. I wasn't aware of the previous attempt: #10596 there is a long discussion there. The blocker issue was also html5lib.
vstinner commentedon Jul 16, 2019
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
yan12125 commentedon Jul 25, 2019
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
tirkarthi commentedon Oct 7, 2019
I think this can be closed since https://bugs.python.org/issue25988 has the PR merged.
vstinner commentedon Jan 12, 2021
New changeset c47c78b by Hugo van Kemenade in branch 'master':
bpo-37324: Remove ABC aliases from collections (GH-23754)
c47c78b
vivainio commentedon Nov 10, 2022
This broke setuptools 38.5.2
hugovk commentedon Nov 10, 2022
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.
vivainio commentedon Nov 10, 2022
@hugovk I was pinned to old version because newer setuptools created metadata that was incompatible with old version of Artifactory
vstinner commentedon Nov 10, 2022
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.
vivainio commentedon Nov 11, 2022
@vstinner that's what we are doing, but we are now evaluating updating to python 3.10 and this (soft) blocker came up
vivainio commentedon Nov 11, 2022
For posteriority, I packaged up the compatibility shims to a python package in pypi: https://github.com/vivainio/fix-py-collections
vstinner commentedon Nov 12, 2022
I proposed https://peps.python.org/pep-0606/ but it got rejected.
vivainio commentedon Nov 14, 2022
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
Python 3.9+ compatibility
Fix: deprecated collections imports