Erro ImportError: cannot import name JSONDecodeError no radiosonde_auto_rx

Ao preparar um novo Raspberry Pi para receber sondas meteorológicas, e seguindo as instruções de instalação deparei-me com um erro inesperado.

pi@galaxia:~/radiosonde_auto_rx/auto_rx $ python auto_rx.py 
Traceback (most recent call last):
  File "auto_rx.py", line 31, in <module>
    from autorx.web import start_flask, stop_flask, flask_emit_event, WebHandler, WebExporter
  File "/home/pi/radiosonde_auto_rx/auto_rx/autorx/web.py", line 23, in <module>
    from flask_socketio import SocketIO
  File "/usr/local/lib/python2.7/dist-packages/flask_socketio/__init__.py", line 21, in <module>
    import socketio
  File "/usr/local/lib/python2.7/dist-packages/socketio/__init__.py", line 3, in <module>
    from .client import Client
  File "/usr/local/lib/python2.7/dist-packages/socketio/client.py", line 7, in <module>
    import engineio
  File "/usr/local/lib/python2.7/dist-packages/engineio/__init__.py", line 3, in <module>
    from .client import Client
  File "/usr/local/lib/python2.7/dist-packages/engineio/client.py", line 2, in <module>
    from json import JSONDecodeError
ImportError: cannot import name JSONDecodeError

Não era a primeira vez que fazia esta configuração, por isso estranhei, e resolvi verificar e voltar a verificar se tinha seguido todas as instruções.

Após concluir que (aparentemente) tinha feito tudo bem, e sem grandes soluções apresentadas pelo Señor Google, ocorreu-me que podia ter algo a ver com a versão do Python. Fui confirmar no outro receptor que estava a usar a versão 2.7, mas por alguma razão na nova instalação, com a mesma versão a coisa não funcionava.

Resolvi então tentar com o Python 3. Primeiro, tive de instalar os pacotes necessários para esta versão (alguns dos pacotes são duplicados, mas não são instalados de novo)

sudo apt-get install python3-numpy python3-setuptools python3-crcmod python3-requests python3-dateutil python3-pip sox git build-essential libtool cmake usbutils libusb-1.0-0-dev rng-tools libsamplerate-dev

e depois instalar com o pip3 os módulos necessários

sudo pip3 install flask flask-socketio

Após isto tudo continuei a seguir as instruções da wiki, mas onde tinha python (o default neste pi é o 2) usei python3, ou seja

python3 auto_rx.py

E o erro deixou de aparecer.

Computadores…