#!/usr/bin/env python3 import os from pathlib import Path import subprocess import sys def find_and_activate_virtualenv(): try: # Get the top-level directory of the git repository my_path = subprocess.check_output( ["git", "rev-parse", "--show-toplevel"], text=True ).strip() except subprocess.CalledProcessError: print( "Error: Not a git repository or unable to determine the top-level directory.", file=sys.stderr, ) sys.exit(1) # Check for virtual environments for venv in ["venv", ".venv", "."]: activate_path = ( Path(my_path) / venv / ("Scripts" if os.name == "nt" else "bin") / "activate" ) 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) 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) if __name__ == "__main__": find_and_activate_virtualenv()