mirror of
https://github.com/ChuckBuilds/LEDMatrix.git
synced 2026-04-10 21:03:01 +00:00
update requirements for web ui
This commit is contained in:
@@ -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.
|
||||
|
||||
Reference in New Issue
Block a user