48 lines
1.0 KiB
Python
48 lines
1.0 KiB
Python
|
import os
|
||
|
import sys
|
||
|
|
||
|
from uv import find_uv_bin
|
||
|
|
||
|
|
||
|
def _detect_virtualenv() -> str:
|
||
|
"""
|
||
|
Find the virtual environment path for the current Python executable.
|
||
|
"""
|
||
|
|
||
|
# If it's already set, then just use it
|
||
|
value = os.getenv("VIRTUAL_ENV")
|
||
|
if value:
|
||
|
return value
|
||
|
|
||
|
# Otherwise, check if we're in a venv
|
||
|
venv_marker = os.path.join(sys.prefix, "pyvenv.cfg")
|
||
|
|
||
|
if os.path.exists(venv_marker):
|
||
|
return sys.prefix
|
||
|
|
||
|
return ""
|
||
|
|
||
|
|
||
|
def _run() -> None:
|
||
|
uv = os.fsdecode(find_uv_bin())
|
||
|
|
||
|
env = os.environ.copy()
|
||
|
venv = _detect_virtualenv()
|
||
|
if venv:
|
||
|
env.setdefault("VIRTUAL_ENV", venv)
|
||
|
|
||
|
# Let `uv` know that it was spawned by this Python interpreter
|
||
|
env["UV_INTERNAL__PARENT_INTERPRETER"] = sys.executable
|
||
|
|
||
|
if sys.platform == "win32":
|
||
|
import subprocess
|
||
|
|
||
|
completed_process = subprocess.run([uv, *sys.argv[1:]], env=env)
|
||
|
sys.exit(completed_process.returncode)
|
||
|
else:
|
||
|
os.execvpe(uv, [uv, *sys.argv[1:]], env=env)
|
||
|
|
||
|
|
||
|
if __name__ == "__main__":
|
||
|
_run()
|