46 lines
1.5 KiB
Python
46 lines
1.5 KiB
Python
import os
|
|
import subprocess
|
|
import sys
|
|
from importlib.metadata import distributions
|
|
|
|
from packaging.requirements import Requirement
|
|
from packaging.version import Version
|
|
|
|
|
|
def install_dependencies():
|
|
current_path = os.path.abspath(os.path.dirname(__file__))
|
|
with open(os.path.join(current_path, "requirements.txt")) as f:
|
|
required_packages = [
|
|
line.strip()
|
|
for line in f.readlines()
|
|
if line.strip() and not line.strip().startswith("#")
|
|
]
|
|
|
|
installed_packages = {
|
|
dist.metadata["Name"]: Version(dist.version) for dist in distributions()
|
|
}
|
|
|
|
for package in required_packages:
|
|
try:
|
|
requirement = Requirement(package)
|
|
installed_version = installed_packages.get(requirement.name)
|
|
if not installed_version or not requirement.specifier.contains(
|
|
installed_version
|
|
):
|
|
try:
|
|
print(f"\033[92m[BizyAir]\033[0m Try to install depency {package}")
|
|
subprocess.check_call(
|
|
[sys.executable, "-m", "pip", "install", package]
|
|
)
|
|
except subprocess.CalledProcessError as e:
|
|
print(f"\033[91m[BizyAir]\033[0m Failed to install {package}: {e}")
|
|
continue
|
|
except Exception as e:
|
|
print(
|
|
f"\033[91m[BizyAir]\033[0m Failed to parse requirement {package}: {e}"
|
|
)
|
|
continue
|
|
|
|
|
|
install_dependencies()
|