diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index adf0ac6fc2..212d822ff8 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -45,6 +45,6 @@ repos: hooks: - id: pylint name: pylint - entry: python script/run-in-env pylint + entry: python3 script/run-in-env.py pylint language: system types: [python] diff --git a/script/run-in-env b/script/run-in-env.py similarity index 63% rename from script/run-in-env rename to script/run-in-env.py index 57bfddccf7..57121266be 100644 --- a/script/run-in-env +++ b/script/run-in-env.py @@ -7,6 +7,13 @@ import sys def find_and_activate_virtualenv(): + if ( + ("VIRTUAL_ENV" in os.environ) + or os.environ.get("DEVCONTAINER", False) + or os.environ.get("ESPHOME_NO_VENV", False) + ): + return + try: # Get the top-level directory of the git repository my_path = subprocess.check_output( @@ -17,7 +24,7 @@ def find_and_activate_virtualenv(): "Error: Not a git repository or unable to determine the top-level directory.", file=sys.stderr, ) - sys.exit(1) + return # Check for virtual environments for venv in ["venv", ".venv", "."]: @@ -29,25 +36,26 @@ def find_and_activate_virtualenv(): ) if activate_path.exists(): # Activate the virtual environment by updating PATH - env = os.environ.copy() venv_bin_dir = activate_path.parent - env["PATH"] = f"{venv_bin_dir}{os.pathsep}{env['PATH']}" - env["VIRTUAL_ENV"] = str(venv_bin_dir.parent) + os.environ["PATH"] = f"{venv_bin_dir}{os.pathsep}{os.environ['PATH']}" + os.environ["VIRTUAL_ENV"] = str(venv_bin_dir.parent) print(f"Activated virtual environment: {venv_bin_dir.parent}") - - # Execute the remaining arguments in the new environment - if len(sys.argv) > 1: - subprocess.run(sys.argv[1:], env=env, check=False) - else: - print( - "No command provided to run in the virtual environment.", - file=sys.stderr, - ) return print("No virtual environment found.", file=sys.stderr) - sys.exit(1) + + +def run_command(): + # Execute the remaining arguments in the new environment + if len(sys.argv) > 1: + subprocess.run(sys.argv[1:], check=False) + else: + print( + "No command provided to run in the virtual environment.", + file=sys.stderr, + ) if __name__ == "__main__": find_and_activate_virtualenv() + run_command()