Compiling errors on VSCode using Python 3.10.6, platform ststm32@5.3.0, framework mbed

Hello everyone. I’m trying to build a project targeting a stm32-based board. However, due to my python version (3.10.6) I believe, the following errors happens on building. I’m aware of the following solution from this github issue changing ‘collections’ to ‘collections.abc’, but it doesn’t worked for me.

Details about my machine:
Ubuntu 22.04.2 LTS
Kernel: Linux 5.15.0-67-generic

An snippet of our ‘platformio.ini’ file:

[env:workbench]
platform = ststm32@5.3.0
board = nucleo_f446re
framework = mbed
build_flags = -std=gnu++14 -Wno-register -DDEBUG_BUILD
build_unflags = -std=gnu++98 -std=c++11
upload_protocol = mbed

Error message:

 *  Executing task: platformio run --environment workbench-release 

Warning! Ignore unknown configuration option `forecast_platform` in section [env:workbench]
Warning! Ignore unknown configuration option `forecast_platform` in section [env:workbench-release]
Warning! Ignore unknown configuration option `forecast_platform` in section [env:rpc]
Processing workbench-release (platform: ststm32@5.3.0; board: nucleo_f446re; framework: mbed)
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
Verbose mode can be enabled via `-v, --verbose` option
CONFIGURATION: https://docs.platformio.org/page/boards/ststm32/nucleo_f446re.html
PLATFORM: ST STM32 (5.3.0) > ST Nucleo F446RE
HARDWARE: STM32F446RET6 180MHz, 128KB RAM, 512KB Flash
DEBUG: Current (stlink) On-board (stlink) External (blackmagic, jlink)
PACKAGES: 
 - framework-mbed @ 5.51105.220603 (5.11.5) 
 - toolchain-gccarmnoneeabi @ 1.70201.0 (7.2.1)
ImportError: cannot import name 'Mapping' from 'collections' (/usr/lib/python3.10/collections/__init__.py):
  File "/home/leonardof/.platformio/penv/lib/python3.10/site-packages/platformio/builder/main.py", line 187:
    env.SConscript("$BUILD_SCRIPT")
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Script/SConscript.py", line 597:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Script/SConscript.py", line 285:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "/home/leonardof/.platformio/platforms/ststm32/builder/main.py", line 90:
    target_elf = env.BuildProgram()
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Util.py", line 737:
    return self.method(*nargs, **kwargs)
  File "/home/leonardof/.platformio/penv/lib/python3.10/site-packages/platformio/builder/tools/piobuild.py", line 60:
    env.ProcessProgramDeps()
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Util.py", line 737:
    return self.method(*nargs, **kwargs)
  File "/home/leonardof/.platformio/penv/lib/python3.10/site-packages/platformio/builder/tools/piobuild.py", line 120:
    env.BuildFrameworks(env.get("PIOFRAMEWORK"))
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Util.py", line 737:
    return self.method(*nargs, **kwargs)
  File "/home/leonardof/.platformio/penv/lib/python3.10/site-packages/platformio/builder/tools/piobuild.py", line 331:
    SConscript(env.GetFrameworkScript(name), exports="env")
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Script/SConscript.py", line 660:
    return method(*args, **kw)
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Script/SConscript.py", line 597:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Script/SConscript.py", line 285:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "/home/leonardof/.platformio/platforms/ststm32/builder/frameworks/mbed.py", line 35:
    SConscript(
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Script/SConscript.py", line 660:
    return method(*args, **kw)
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Script/SConscript.py", line 597:
    return _SConscript(self.fs, *files, **subst_kw)
  File "/home/leonardof/.platformio/packages/tool-scons/scons-local-4.4.0/SCons/Script/SConscript.py", line 285:
    exec(compile(scriptdata, scriptname, 'exec'), call_stack[-1].globals)
  File "/home/leonardof/.platformio/packages/framework-mbed/platformio/platformio-build.py", line 40:
    from pio_mbed_adapter import PlatformioMbedAdapter
  File "/home/leonardof/.platformio/packages/framework-mbed/platformio/pio_mbed_adapter.py", line 23:
    from tools.build_api import (prepare_toolchain, merge_region_list,
  File "/home/leonardof/.platformio/packages/framework-mbed/tools/build_api.py", line 32:
    from jinja2 import FileSystemLoader
  File "/home/leonardof/.platformio/packages/framework-mbed/platformio/package_deps/py3/jinja2/__init__.py", line 33:
    from jinja2.environment import Environment, Template
  File "/home/leonardof/.platformio/packages/framework-mbed/platformio/package_deps/py3/jinja2/environment.py", line 16:
    from jinja2.defaults import BLOCK_START_STRING, \
  File "/home/leonardof/.platformio/packages/framework-mbed/platformio/package_deps/py3/jinja2/defaults.py", line 32:
    from jinja2.tests import TESTS as DEFAULT_TESTS
  File "/home/leonardof/.platformio/packages/framework-mbed/platformio/package_deps/py3/jinja2/tests.py", line 13:
    from collections import Mapping
========================================================================== [FAILED] Took 0.49 seconds ==========================================================================

Environment        Status    Duration
-----------------  --------  ------------
workbench-release  FAILED    00:00:00.488
==================================================================== 1 failed, 0 succeeded in 00:00:00.488 ====================================================================

 *  The terminal process "platformio 'run', '--environment', 'workbench-release'" terminated with exit code: 1. 
 *  Terminal will be reused by tasks, press any key to close it.

The problem is that there is more than only one file calling from collections import Iterable. The Mapping module has the same issue too and is not importable form collections in python3.10
On Linux these three lines of command resolved the issue for me:

cd ~/.platformio/packages/framework-mbed/platformio
grep -Ilr "collections import Iterable" | xargs sed -i 's/collections\ \(import\ Iterable\)/collections.abc\ \1/g'
grep -Ilr "collections import Mapping" | xargs sed -i 's/collections\ \(import\ Mapping\)/collections.abc\ \1/g'

Thank u for your reply. I’ll check later if this works in my case. It was easier here to install another version of python (< 3.10), and reinstall pio using the proper python version.