venv requirements

This commit is contained in:
Chuck
2025-07-27 20:55:43 -05:00
parent d9e5b9404d
commit 88078111b4
4 changed files with 145 additions and 22 deletions

View File

@@ -22,8 +22,39 @@ logging.basicConfig(
logger = logging.getLogger(__name__)
def check_dependencies():
"""Check if required dependencies are installed."""
def setup_virtual_environment():
"""Set up a virtual environment for the web interface."""
venv_path = Path(__file__).parent / 'venv_web_v2'
if not venv_path.exists():
logger.info("Creating virtual environment...")
try:
subprocess.check_call([
sys.executable, '-m', 'venv', str(venv_path)
])
logger.info("Virtual environment created successfully")
except subprocess.CalledProcessError as e:
logger.error(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 check_dependencies(venv_path):
"""Check if required dependencies are installed in the virtual environment."""
required_packages = [
'flask',
'flask_socketio',
@@ -32,19 +63,25 @@ def check_dependencies():
'eventlet'
]
# Use the virtual environment's Python to check imports
venv_python = get_venv_python(venv_path)
missing_packages = []
for package in required_packages:
try:
__import__(package)
except ImportError:
subprocess.check_call([
str(venv_python), '-c', f'import {package}'
], capture_output=True)
except subprocess.CalledProcessError:
missing_packages.append(package)
if missing_packages:
logger.warning(f"Missing packages: {missing_packages}")
logger.info("Installing missing packages...")
logger.info("Installing missing packages in virtual environment...")
try:
venv_pip = get_venv_pip(venv_path)
subprocess.check_call([
sys.executable, '-m', 'pip', 'install', '-r', 'requirements_web_v2.txt'
str(venv_pip), 'install', '-r', 'requirements_web_v2.txt'
])
logger.info("Dependencies installed successfully")
except subprocess.CalledProcessError as e:
@@ -74,32 +111,31 @@ def main():
script_dir = Path(__file__).parent
os.chdir(script_dir)
# Check dependencies
if not check_dependencies():
# Set up virtual environment
venv_path = setup_virtual_environment()
if not venv_path:
logger.error("Failed to set up virtual environment. Exiting.")
sys.exit(1)
# Check dependencies in virtual environment
if not check_dependencies(venv_path):
logger.error("Dependency check failed. Exiting.")
sys.exit(1)
# Check permissions
check_permissions()
# Import and start the web interface
# Import and start the web interface using the virtual environment's Python
try:
from web_interface_v2 import app, socketio
venv_python = get_venv_python(venv_path)
logger.info("Web interface loaded successfully")
# Start the server
# Start the server using the virtual environment's Python
logger.info("Starting web server on http://0.0.0.0:5001")
socketio.run(
app,
host='0.0.0.0',
port=5001, # Use port 5001 to avoid conflicts
debug=False,
allow_unsafe_werkzeug=True
)
subprocess.run([
str(venv_python), 'web_interface_v2.py'
])
except ImportError as e:
logger.error(f"Failed to import web interface: {e}")
sys.exit(1)
except Exception as e:
logger.error(f"Failed to start web interface: {e}")
sys.exit(1)