windy.com extension error: "No module named 'distutils'"

36 views
Skip to first unread message

jo...@kinetica.com.au

unread,
Oct 13, 2025, 9:42:15 PM (2 days ago) Oct 13
to weewx-user
Hi everyone,

I'm running weewx v5.1.0 and recently installed the windy extension from Matthew Wall's weewx-windy github but I'm getting a ModuleNotFoundError: No module named 'distutils' error message when weewx attempts to start. I've logged an issue in the github for this project but it appears that the extension might be stale since there hasn't been an update for 5 years. Would anyone know of a workaround I could use to get this extension working or is there an alternative extension I could use for windy.com?

Thanks,

John

---
syslog:

2025-10-13T22:45:28.785720+00:00 weewx weewxd[2702]: INFO user.interceptor: shutting down server thread
2025-10-13T22:45:29.218019+00:00 weewx weewxd[2702]: CRITICAL __main__: Caught unrecoverable exception:
2025-10-13T22:45:29.218246+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****  No module named 'distutils'
2025-10-13T22:45:29.221213+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****  Traceback (most recent call last):
2025-10-13T22:45:29.221525+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "/usr/share/weewx/weewxd.py", line 121, in main
2025-10-13T22:45:29.221742+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****      engine = weewx.engine.StdEngine(config_dict)
2025-10-13T22:45:29.223622+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-10-13T22:45:29.223741+00:00 weewx weewxd[2702]: Traceback (most recent call last):
2025-10-13T22:45:29.224034+00:00 weewx weewxd[2702]:   File "/usr/share/weewx/weewxd.py", line 226, in <module>
2025-10-13T22:45:29.224090+00:00 weewx weewxd[2702]:     main()
2025-10-13T22:45:29.224130+00:00 weewx weewxd[2702]:   File "/usr/share/weewx/weewxd.py", line 121, in main
2025-10-13T22:45:29.224178+00:00 weewx weewxd[2702]:     engine = weewx.engine.StdEngine(config_dict)
2025-10-13T22:45:29.224222+00:00 weewx weewxd[2702]:              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-10-13T22:45:29.224262+00:00 weewx weewxd[2702]:   File "/usr/share/weewx/weewx/engine.py", line 89, in __init__
2025-10-13T22:45:29.224300+00:00 weewx weewxd[2702]:     self.loadServices(config_dict)
2025-10-13T22:45:29.224337+00:00 weewx weewxd[2702]:   File "/usr/share/weewx/weewx/engine.py", line 157, in loadServices
2025-10-13T22:45:29.224378+00:00 weewx weewxd[2702]:     obj = weeutil.weeutil.get_object(svc)(self, config_dict)
2025-10-13T22:45:29.224423+00:00 weewx weewxd[2702]:           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-10-13T22:45:29.224463+00:00 weewx weewxd[2702]:   File "/usr/share/weewx/weeutil/weeutil.py", line 1404, in get_object
2025-10-13T22:45:29.224541+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "/usr/share/weewx/weewx/engine.py", line 89, in __init__
2025-10-13T22:45:29.224618+00:00 weewx weewxd[2702]:     module = importlib.import_module(module_name)
2025-10-13T22:45:29.224954+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****      self.loadServices(config_dict)
2025-10-13T22:45:29.225097+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "/usr/share/weewx/weewx/engine.py", line 157, in loadServices
2025-10-13T22:45:29.225188+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****      obj = weeutil.weeutil.get_object(svc)(self, config_dict)
2025-10-13T22:45:29.227728+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-10-13T22:45:29.227815+00:00 weewx weewxd[2702]:              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-10-13T22:45:29.227918+00:00 weewx weewxd[2702]:   File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module
2025-10-13T22:45:29.227976+00:00 weewx weewxd[2702]:     return _bootstrap._gcd_import(name[level:], package, level)
2025-10-13T22:45:29.228028+00:00 weewx weewxd[2702]:            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-10-13T22:45:29.228070+00:00 weewx weewxd[2702]:   File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
2025-10-13T22:45:29.228115+00:00 weewx weewxd[2702]:   File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
2025-10-13T22:45:29.228156+00:00 weewx weewxd[2702]:   File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
2025-10-13T22:45:29.228194+00:00 weewx weewxd[2702]:   File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
2025-10-13T22:45:29.228236+00:00 weewx weewxd[2702]:   File "<frozen importlib._bootstrap_external>", line 995, in exec_module
2025-10-13T22:45:29.228280+00:00 weewx weewxd[2702]:   File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
2025-10-13T22:45:29.228328+00:00 weewx weewxd[2702]:   File "/etc/weewx/bin/user/windy.py", line 46, in <module>
2025-10-13T22:45:29.228371+00:00 weewx weewxd[2702]:     from distutils.version import StrictVersion
2025-10-13T22:45:29.228409+00:00 weewx weewxd[2702]: ModuleNotFoundError: No module named 'distutils'
2025-10-13T22:45:29.228466+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "/usr/share/weewx/weeutil/weeutil.py", line 1404, in get_object
2025-10-13T22:45:29.228517+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****      module = importlib.import_module(module_name)
2025-10-13T22:45:29.228584+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-10-13T22:45:29.228629+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "/usr/lib/python3.12/importlib/__init__.py", line 90, in import_module
2025-10-13T22:45:29.228683+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****      return _bootstrap._gcd_import(name[level:], package, level)
2025-10-13T22:45:29.228738+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
2025-10-13T22:45:29.228789+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 1387, in _gcd_import
2025-10-13T22:45:29.228834+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
2025-10-13T22:45:29.228878+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
2025-10-13T22:45:29.228922+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
2025-10-13T22:45:29.228964+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "<frozen importlib._bootstrap_external>", line 995, in exec_module
2025-10-13T22:45:29.229007+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "<frozen importlib._bootstrap>", line 488, in _call_with_frames_removed
2025-10-13T22:45:29.229045+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****    File "/etc/weewx/bin/user/windy.py", line 46, in <module>
2025-10-13T22:45:29.229087+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****      from distutils.version import StrictVersion
2025-10-13T22:45:29.229150+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****  ModuleNotFoundError: No module named 'distutils'
2025-10-13T22:45:29.229195+00:00 weewx weewxd[2702]: CRITICAL __main__:     ****  Exiting.
2025-10-13T22:45:29.263650+00:00 weewx systemd[1]: weewx.service: Main process exited, code=exited, status=1/FAILURE
2025-10-13T22:45:29.264708+00:00 weewx systemd[1]: weewx.service: Failed with result 'exit-code'.

Jobu

unread,
Oct 13, 2025, 10:03:17 PM (2 days ago) Oct 13
to weewx-user
distutils was deprecated . . . maybe in python 3.12

I think setuptools has a distutils compatibility layer, so you could try installing that with pip.   

Good luck and maybe someone wiser will come along

jo...@kinetica.com.au

unread,
Oct 13, 2025, 10:18:28 PM (2 days ago) Oct 13
to weewx-user
Thanks so much for your reply.

I'm running Ubuntu server 24.04 and pip isn't installed by default so when I installed it by running 'apt install pip', I noticed that the python3-setuputils package was installed and it appears that this has fixed the issue. For others who run into this issue, this could probably be fixed by just installing the python3-setuputils package

Thanks again for your help and hopefully this helps someone in the future.

jo...@kinetica.com.au

unread,
Oct 14, 2025, 6:50:04 AM (2 days ago) Oct 14
to weewx-user
Hi everyone,

I'm running weewx v5.1.0 and recently installed the windy extension from https://github.com/matthewwall/weewx-windy but I'm getting a ModuleNotFoundError: No module named 'distutils' error message when weewx attempts to start. I've logged an issue in the github for this project but it appears that the extension might be stale since there hasn't been an update for 5 years. Would anyone know of a workaround I could use to get this extension working or is there an alternative extension I could use for windy.com?
Reply all
Reply to author
Forward
0 new messages