update requirements for web ui

This commit is contained in:
Chuck
2025-08-10 21:22:36 -05:00
parent 8a8e3c21cb
commit 151777fbd6
5 changed files with 528 additions and 7 deletions

View File

@@ -2,19 +2,78 @@ import json
import os
import sys
import subprocess
from pathlib import Path
PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
CONFIG_FILE = os.path.join(PROJECT_DIR, 'config', 'config.json')
WEB_INTERFACE_SCRIPT = os.path.join(PROJECT_DIR, 'web_interface_v2.py')
def setup_virtual_environment():
"""Set up a virtual environment for the web interface if it doesn't exist."""
venv_path = Path(PROJECT_DIR) / 'venv_web_v2'
if not venv_path.exists():
print("Creating virtual environment...")
try:
subprocess.check_call([
sys.executable, '-m', 'venv', str(venv_path)
])
print("Virtual environment created successfully")
except subprocess.CalledProcessError as e:
print(f"Failed to create virtual environment: {e}")
return None
return venv_path
def get_venv_python(venv_path):
"""Get the Python executable path from the virtual environment."""
if os.name == 'nt': # Windows
return venv_path / 'Scripts' / 'python.exe'
else: # Unix/Linux
return venv_path / 'bin' / 'python'
def get_venv_pip(venv_path):
"""Get the pip executable path from the virtual environment."""
if os.name == 'nt': # Windows
return venv_path / 'Scripts' / 'pip.exe'
else: # Unix/Linux
return venv_path / 'bin' / 'pip'
def install_dependencies(venv_path):
"""Install required dependencies in the virtual environment."""
print("Installing dependencies...")
try:
venv_pip = get_venv_pip(venv_path)
requirements_file = os.path.join(PROJECT_DIR, 'requirements_web_v2.txt')
subprocess.check_call([
str(venv_pip), 'install', '-r', requirements_file
])
print("Dependencies installed successfully")
# Install rgbmatrix module from local source
print("Installing rgbmatrix module...")
rgbmatrix_path = Path(PROJECT_DIR) / 'rpi-rgb-led-matrix-master' / 'bindings' / 'python'
if rgbmatrix_path.exists():
subprocess.check_call([
str(venv_pip), 'install', '-e', str(rgbmatrix_path)
], stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
print("rgbmatrix module installed successfully")
return True
except subprocess.CalledProcessError as e:
print(f"Failed to install dependencies: {e}")
return False
def get_python_executable():
"""Prefer the venv_web_v2 Python if present, else fall back to current interpreter."""
project_dir = PROJECT_DIR
if os.name == 'nt':
venv_python = os.path.join(project_dir, 'venv_web_v2', 'Scripts', 'python.exe')
else:
venv_python = os.path.join(project_dir, 'venv_web_v2', 'bin', 'python')
if os.path.exists(venv_python):
return venv_python
venv_path = Path(project_dir) / 'venv_web_v2'
if venv_path.exists():
venv_python = get_venv_python(venv_path)
if venv_python.exists():
return str(venv_python)
return sys.executable
def main():
@@ -32,6 +91,15 @@ def main():
if autostart_enabled is True: # Explicitly check for True
print("Configuration 'web_display_autostart' is true. Starting web interface...")
# Set up virtual environment if it doesn't exist
venv_path = setup_virtual_environment()
if venv_path:
# Install dependencies
if not install_dependencies(venv_path):
print("Failed to install dependencies. Exiting.")
sys.exit(1)
try:
# Replace the current process with web_interface.py
# This is important for systemd to correctly manage the web server process.