sd-dynamic-prompts/install.py

50 lines
1.3 KiB
Python

import sys
import logging
from pathlib import Path
logger = logging.getLogger(__name__)
if sys.version_info < (3, 8):
import importlib_metadata
else:
import importlib.metadata as importlib_metadata
import launch
def ensure_installed(package):
isinstalled = launch.is_installed(package)
if not isinstalled:
launch.run_pip(f"install {package}", desc=f"{package}")
def ensure_version(package, version):
isinstalled = launch.is_installed(package)
if isinstalled:
installed_version = importlib_metadata.version(package)
if installed_version == version:
return
launch.run_pip(f"install {package}=={version}", desc=f"{package}=={version}")
def check_versions():
req_file = Path(__file__).parent / "requirements.txt"
for row in open(req_file):
splits = row.split("==")
try:
if "dynamicprompts" in row:
launch.run_pip(f"install -U {row}", desc=row)
elif len(splits) == 2:
package = splits[0].strip()
version = splits[1].strip()
ensure_version(package, version)
else:
package = row.strip()
ensure_installed(package)
except Exception as e:
logger.exception(e)
check_versions()