pw_env_setup: Detect incompatible virtualenvs
Detect and remove incompatible virtualenvs before doing virtualenv
setup.
Change-Id: I7322835514e4d911c9cdd33b469cb531a5feba82
Reviewed-on: https://pigweed-review.googlesource.com/c/pigweed/pigweed/+/48200
Pigweed-Auto-Submit: Rob Mohr <mohrr@google.com>
Commit-Queue: Auto-Submit <auto-submit@pigweed.google.com.iam.gserviceaccount.com>
Reviewed-by: Keir Mierle <keir@google.com>
diff --git a/pw_env_setup/py/pw_env_setup/virtualenv_setup/install.py b/pw_env_setup/py/pw_env_setup/virtualenv_setup/install.py
index 555f462..9843734 100644
--- a/pw_env_setup/py/pw_env_setup/virtualenv_setup/install.py
+++ b/pw_env_setup/py/pw_env_setup/virtualenv_setup/install.py
@@ -19,6 +19,7 @@
import glob
import os
import re
+import shutil
import subprocess
import sys
import tempfile
@@ -105,6 +106,22 @@
return matches
+def _check_venv(python, version, venv_path, pyvenv_cfg):
+ # Check if the python location and version used for the existing virtualenv
+ # is the same as the python we're using. If it doesn't match, we need to
+ # delete the existing virtualenv and start again.
+ if os.path.exists(pyvenv_cfg):
+ pyvenv_values = {}
+ with open(pyvenv_cfg, 'r') as ins:
+ for line in ins:
+ key, value = line.split(' = ', 1)
+ pyvenv_values[key] = value
+ if os.path.dirname(python) != pyvenv_values.get('home'):
+ shutil.rmtree(venv_path)
+ elif pyvenv_values.get('version') not in version:
+ shutil.rmtree(venv_path)
+
+
def install(
project_root,
venv_path,
@@ -138,6 +155,9 @@
os.unlink(os.path.join(venv_bin, entry))
pyvenv_cfg = os.path.join(venv_path, 'pyvenv.cfg')
+
+ _check_venv(python, version, venv_path, pyvenv_cfg)
+
if full_envsetup or not os.path.exists(pyvenv_cfg):
# On Mac sometimes the CIPD Python has __PYVENV_LAUNCHER__ set to
# point to the system Python, which causes CIPD Python to create