2025-02-28 23:53:11 +09:00

46 lines
1.2 KiB
Python

import sys
import shlex
import subprocess
from functools import wraps
def patch():
if hasattr(subprocess, "__original_run"):
return
print("using uv")
try:
subprocess.run(['uv', '-V'])
except FileNotFoundError:
subprocess.run([sys.executable, '-m', 'pip', 'install', 'uv'])
subprocess.__original_run = subprocess.run
@wraps(subprocess.__original_run)
def patched_run(*args, **kwargs):
if args:
command, *_args = args
else:
command, _args = kwargs.pop("args", ""), ()
if isinstance(command, str):
command = shlex.split(command)
else:
command = [arg.strip() for arg in command]
assert isinstance(command, list)
if "pip" not in command:
return subprocess.__original_run([*command, *_args], **kwargs)
cmd = command[command.index("pip") + 1 :]
BAD_FLAGS = ("--prefer-binary",)
cmd = [arg for arg in cmd if arg not in BAD_FLAGS]
modified_command = ["uv", "pip", *cmd]
return subprocess.__original_run([*modified_command, *_args], **kwargs)
subprocess.run = patched_run