123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- import os
- import subprocess
- def write_log(output, name, type):
- script_dir = os.path.dirname((__file__))
- with open(
- os.path.join(script_dir, "..", "..", "logs", f"{type}-{name}.log"), "w"
- ) as outfile:
- outfile.write("\n".join(output))
- def pip_install_wrapper(requirements, name):
- def fn():
- output = []
- for line in _pip_install(requirements, name):
- output.append(line)
- yield "<br />".join(output)
- write_log(output, name, type="pip-install")
- return fn
- def pip_uninstall_wrapper(package_name, name):
- def fn():
- output = []
- for line in _pip_uninstall(package_name, name):
- output.append(line)
- yield "<br />".join(output)
- write_log(output, name, type="pip-uninstall")
- return fn
- def _pip_install(requirements, name):
- # process = subprocess.Popen(
- # f"uv pip install {requirements}",
- # shell=True,
- # stdout=subprocess.PIPE,
- # stderr=subprocess.STDOUT,
- # universal_newlines=True,
- # )
- # # Stream the output to the console
- # for line in process.stdout: # type: ignore
- # print(line, end="")
- # yield line
- # # Wait for the process to finish
- # process.wait()
- # # Check if the process was successful
- # if process.returncode == 0:
- # print(f"Successfully installed {name}")
- # yield f"Successfully installed {name}, please restart the webui"
- # else:
- # print(f"Failed to install {name}")
- # yield f"Failed to install {name}"
- try:
- print(f"Installing {name} dependencies...")
- yield from pip_shell(f"pip install {requirements}")
- # yield from pip_shell(f"uv pip install {requirements}")
- print(f"Successfully installed {name} dependencies")
- yield f"Successfully installed {name} dependencies"
- except Exception:
- print(f"Failed to install {name} dependencies")
- yield f"Failed to install {name} dependencies"
- def _pip_uninstall(package_name, name):
- try:
- print(f"Uninstalling {name} ({package_name})...")
- yield from pip_shell(f"pip uninstall -y {package_name}")
- # yield from pip_shell(f"uv pip uninstall {package_name}")
- print(f"Successfully uninstalled {name} ({package_name})")
- yield f"Successfully uninstalled {name} ({package_name})"
- except Exception:
- print(f"Failed to uninstall {name} ({package_name})")
- yield f"Failed to uninstall {name} ({package_name})"
- def pip_shell(command):
- process = subprocess.Popen(
- command,
- shell=True,
- stdout=subprocess.PIPE,
- stderr=subprocess.STDOUT,
- universal_newlines=True,
- )
- # Stream the output to the console
- for line in process.stdout: # type: ignore
- print(line, end="")
- yield line
- # Wait for the process to finish
- process.wait()
- if process.returncode != 0:
- raise Exception(f"Failed to run {command}")
|