Unable to import freegames python package : AttributeError: module 'collections' has no attribute 'Sequence'

Question:

Python version : 3.10

I was trying to install the freegames python package using the following pip command

C:Userspraty>pip install freegames
Defaulting to user installation because normal site-packages is not writeable
Collecting freegames
  Downloading freegames-2.3.2-py2.py3-none-any.whl (108 kB)
     |████████████████████████████████| 108 kB 504 kB/s
Installing collected packages: freegames
Successfully installed freegames-2.3.2

But while importing the same on my python environment I was getting this error

C:Userspraty>python
Python 3.10.0 (tags/v3.10.0:b494f59, Oct  4 2021, 19:00:18) [MSC v.1929 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import freegames
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "C:UserspratyAppDataRoamingPythonPython310site-packagesfreegames_init_.py", line 61, in <module>
    from .utils import floor, line, path, square, vector
  File "C:UserspratyAppDataRoamingPythonPython310site-packagesfreegamesutils.py", line 77, in <module>
    class vector(collections.Sequence):
AttributeError: module 'collections' has no attribute 'Sequence'

How do I resolve the same?

Asked By: Himanshu Poddar

||

Answers:

For quite some time Sequence was importable from collections:

$ python2.7 -c "from collections import Sequence"
$ python3.4 -c "from collections import Sequence"
$ python3.5 -c "from collections import Sequence"
$ python3.6 -c "from collections import Sequence"

Starting from Python 3.7 there was a warning the class has been moved to collections.abc:

$ python3.7 -c "from collections import Sequence"
-c:1: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3,and in 3.9 it will stop working
$ python3.8 -c "from collections import Sequence"
<string>:1: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working
$ python3.9 -c "from collections import Sequence"
<string>:1: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working

In Python 3.10 this became an error:

$ python3.10 -c "from collections import Sequence"
Traceback (most recent call last):
  File "<string>", line 1, in <module>
ImportError: cannot import name 'Sequence' from 'collections' (/home/phd/.local/lib/python3.10/collections/__init__.py)
$ python3.10 -c "from collections.abc import Sequence"

Report the problem to the author of freegames. Downgrade to Python 3.9. Learn that you should never be so fast to upgrade to the latest and greatest versions.

Answered By: phd

This issue has been resolved

import collections.abc as collections

module 'collections' has no attribute 'Mapping', issue on MACOS for SDK installation

Answered By: Siavash Mortezavi

This way can solved my issue.

import collections

collections.Mapping = collections.abc.Mapping

collections.Sequence = collections.abc.Sequence

Answered By: zarzarsan

this is caused by the fact that you are using an old version od Django which is incompatible with python3.10.

You can either downgrade your python or upgrade your django (the latter can require a lot of changes on your code).

try this

sudo vim /usr/lib/python3.10/collections/__init__.py

search for line

from _weakref import proxy as _proxy

right below it, just paste

# my changes
#--------------

import collections
collections.Mapping = collections.abc.Mapping
collections.Sequence = collections.abc.Sequence

#--------------
Answered By: Tms91