Expose find_uv_bin and declare typing support (#1728)

Resolves https://github.com/astral-sh/uv/issues/1677

Signed-off-by: Bernát Gábor <bgabor8@bloomberg.net>
This commit is contained in:
Bernát Gábor 2024-02-20 07:21:58 -08:00 committed by GitHub
parent f7722c02c1
commit 469ccf826f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 45 additions and 30 deletions

View file

@ -0,0 +1,35 @@
from __future__ import annotations
import os
import sys
import sysconfig
def find_uv_bin() -> str:
"""Return the uv binary path."""
uv_exe = "uv" + sysconfig.get_config_var("EXE")
path = os.path.join(sysconfig.get_path("scripts"), uv_exe)
if os.path.isfile(path):
return path
if sys.version_info >= (3, 10):
user_scheme = sysconfig.get_preferred_scheme("user")
elif os.name == "nt":
user_scheme = "nt_user"
elif sys.platform == "darwin" and sys._framework:
user_scheme = "osx_framework_user"
else:
user_scheme = "posix_user"
path = os.path.join(sysconfig.get_path("scripts", scheme=user_scheme), uv_exe)
if os.path.isfile(path):
return path
raise FileNotFoundError(path)
__all__ = [
"find_uv_bin",
]

View file

@ -1,9 +1,10 @@
import os
import sys
import sysconfig
from uv import find_uv_bin
def detect_virtualenv() -> str:
def _detect_virtualenv() -> str:
"""
Find the virtual environment path for the current Python executable.
"""
@ -21,37 +22,11 @@ def detect_virtualenv() -> str:
return ""
def find_uv_bin() -> str:
"""Return the uv binary path."""
uv_exe = "uv" + sysconfig.get_config_var("EXE")
path = os.path.join(sysconfig.get_path("scripts"), uv_exe)
if os.path.isfile(path):
return path
if sys.version_info >= (3, 10):
user_scheme = sysconfig.get_preferred_scheme("user")
elif os.name == "nt":
user_scheme = "nt_user"
elif sys.platform == "darwin" and sys._framework:
user_scheme = "osx_framework_user"
else:
user_scheme = "posix_user"
path = os.path.join(sysconfig.get_path("scripts", scheme=user_scheme), uv_exe)
if os.path.isfile(path):
return path
raise FileNotFoundError(path)
if __name__ == "__main__":
def _run() -> None:
uv = os.fsdecode(find_uv_bin())
env = os.environ.copy()
venv = detect_virtualenv()
venv = _detect_virtualenv()
if venv:
env.setdefault("VIRTUAL_ENV", venv)
@ -62,3 +37,8 @@ if __name__ == "__main__":
sys.exit(completed_process.returncode)
else:
os.execvpe(uv, [uv, *sys.argv[1:]], env=env)
if __name__ == "__main__":
_run()

0
python/uv/py.typed Normal file
View file