Files
iov_data_analysis_agent/bootstrap.py

63 lines
2.2 KiB
Python
Raw Normal View History

2026-01-09 16:52:45 +08:00
import sys
import subprocess
import importlib.metadata
import os
def check_dependencies():
"""Checks if dependencies in requirements.txt are installed."""
requirements_file = "requirements.txt"
if not os.path.exists(requirements_file):
print(f"Warning: {requirements_file} not found. Skipping dependency check.")
return
print("Checking dependencies...")
missing_packages = []
with open(requirements_file, "r") as f:
for line in f:
line = line.strip()
if not line or line.startswith("#"):
continue
# Simple parsing for package name.
# This handles 'package>=version', 'package==version', 'package'
# It does NOT handle complex markers perfectly, but suffices for basic checking.
package_name = line.split("=")[0].split(">")[0].split("<")[0].strip()
try:
importlib.metadata.version(package_name)
except importlib.metadata.PackageNotFoundError:
missing_packages.append(line)
if missing_packages:
print(f"Missing dependencies: {', '.join(missing_packages)}")
print("Installing missing dependencies...")
try:
subprocess.check_call([sys.executable, "-m", "pip", "install", "-r", requirements_file])
print("Dependencies installed successfully.")
except subprocess.CalledProcessError as e:
print(f"Error installing dependencies: {e}")
sys.exit(1)
else:
print("All dependencies checked.")
def main():
check_dependencies()
print("Starting application...")
try:
# Run the main application
# Using sys.executable ensures we use the same python interpreter
subprocess.run([sys.executable, "main.py"], check=True)
except subprocess.CalledProcessError as e:
print(f"Application exited with error: {e}")
sys.exit(e.returncode)
except KeyboardInterrupt:
print("\nApplication stopped by user.")
except Exception as e:
print(f"An unexpected error occurred: {e}")
sys.exit(1)
if __name__ == "__main__":
main()