fix(tools): Detect Nix use and work around it for installation

Nix will create a new derivation in the store for python packages,
which leads to mismatch between the system prefixes, invalidating a
widely used check for being in a virtual environment.
This adds a Nix-specific fix for virtualenv detection.

Closes https://github.com/espressif/esp-idf/pull/14435
This commit is contained in:
Djordje Nedic
2024-10-22 00:19:14 +02:00
parent 12398c0f25
commit c6bd0ded16

View File

@ -2574,7 +2574,10 @@ def action_install_python_env(args): # type: ignore
reinstall = args.reinstall
idf_python_env_path, _, virtualenv_python, idf_version = get_python_env_path()
is_virtualenv = hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix)
nix_store = os.environ.get('NIX_STORE')
is_nix = nix_store is not None and sys.base_prefix.startswith(nix_store) and sys.prefix.startswith(nix_store)
is_virtualenv = not is_nix and (hasattr(sys, 'real_prefix') or (hasattr(sys, 'base_prefix') and sys.base_prefix != sys.prefix))
if is_virtualenv and (not os.path.exists(idf_python_env_path) or reinstall):
fatal('This script was called from a virtual environment, can not create a virtual environment again')
raise SystemExit(1)