From 7ab93f219372410c24e6ace0e86a283b1423d0fd Mon Sep 17 00:00:00 2001 From: j4n Date: Thu, 11 Jun 2026 07:55:58 +0200 Subject: [PATCH] fix(cmdeploy): check venv python versions and purge if mismatched `cmdeploy run` failed after upgrade system upgrade to Debian 13 with "Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding" indicating a Python version missmatch. Check for both versions and remove old `remote_venv_dir` on mismatch to allow clean reinitialization by subsequent pip.virtualenv(). --- cmdeploy/src/cmdeploy/deployers.py | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/cmdeploy/src/cmdeploy/deployers.py b/cmdeploy/src/cmdeploy/deployers.py index 933a4477..b0793afc 100644 --- a/cmdeploy/src/cmdeploy/deployers.py +++ b/cmdeploy/src/cmdeploy/deployers.py @@ -98,6 +98,19 @@ def _install_remote_venv_with_chatmaild(deployer) -> None: dest=remote_dist_file, ) + # Remove venv if its Python major.minor doesn't match the system Python + server.shell( + name="remove stale chatmaild venv if python version changed", + commands=["\n".join([ + f"if [ -d {remote_venv_dir} ]; then", + r" re='[0-9]+\.[0-9]+'", # match major.minor from 'Python X.Y.Z'" + ' SYS_VERSION=$(python3 --version | grep -oE "$re")', + f' VENV_VERSION=$({remote_venv_dir}/bin/python --version 2>/dev/null | grep -oE "$re")', + f' [ "$SYS_VERSION" = "$VENV_VERSION" ] || rm -rf {remote_venv_dir}', + "fi", + ])], + ) + pip.virtualenv( name=f"chatmaild virtualenv {remote_venv_dir}", path=remote_venv_dir,