53 lines
1.2 KiB
Python
53 lines
1.2 KiB
Python
import importlib
|
|
import importlib.util
|
|
import os
|
|
import subprocess
|
|
import sys
|
|
from typing import Dict, Optional
|
|
|
|
from packaging.version import Version
|
|
|
|
|
|
python = sys.executable
|
|
index_url = os.environ.get("INDEX_URL", "")
|
|
|
|
|
|
def version(package: str) -> Optional[Version]:
|
|
try:
|
|
return Version(importlib.import_module(package).__version__)
|
|
except ModuleNotFoundError:
|
|
return None
|
|
|
|
|
|
def is_installed(package: str) -> bool:
|
|
try:
|
|
spec = importlib.util.find_spec(package)
|
|
except ModuleNotFoundError:
|
|
return False
|
|
|
|
return spec is not None
|
|
|
|
|
|
def run_python(command: str, env: Dict[str, str] = None) -> str:
|
|
run_kwargs = {
|
|
"args": f"{python} {command}",
|
|
"shell": True,
|
|
"env": os.environ if env is None else env,
|
|
"encoding": "utf8",
|
|
"errors": "ignore",
|
|
}
|
|
|
|
print(run_kwargs["args"])
|
|
|
|
result = subprocess.run(**run_kwargs)
|
|
|
|
if result.returncode != 0:
|
|
print(f"Error running command: {command}", file=sys.stderr)
|
|
raise RuntimeError(f"Error running command: {command}")
|
|
|
|
return result.stdout or ""
|
|
|
|
|
|
def run_pip(command: str, env: Dict[str, str] = None) -> str:
|
|
return run_python(f"-m pip {command}", env)
|