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()