Resolvendo o erro "collections' has no attribute 'MutableMapping'" ao utilizar a bilbioteca Tornado
Ao tentar executar uma aplicação que utiliza o tornado.http
, você pode receber o seguinte erro:
AttributeError: module 'collections' has no attribute 'MutableMapping'
O problema
Pelo que andei pesquisando, a biblioteca collections
foi modificada nas versões superiores ao Python 3.9.
Para versões 3.9 ou inferiores, a classe MutableMapping
é importada a partir de import collections.MutableMapping
.
Para as versões iguais ou superiores ao Python 3.10, a importação deve ser feita a partir de import collections.abc.MutableMapping
.
Então, o que provavelmente causa o problema é estar tentando executar o seu projeto que utiliza tornado
em uma versão do Python igual ou superior a 3.10
.
Solução
Para contornar o problema, podemos fazer uma espécie de Polyfill, que tem como finalidade manter a compabilidade com o código escrito para versões iguais ou anteriores ao Python 3.9.
Veja:
import collections
try:
from collections import abc
collections.MutableMapping = abc.MutableMapping
except:
pass
import tornado.websocket
from tornado.httpserver import HTTPServer
# restante das importações