diff --git a/lightrag/api/lightrag_server.py b/lightrag/api/lightrag_server.py index 76901b90..0b4a78b8 100644 --- a/lightrag/api/lightrag_server.py +++ b/lightrag/api/lightrag_server.py @@ -12,6 +12,7 @@ import os import logging import logging.config import uvicorn +import pipmaster as pm from fastapi.staticfiles import StaticFiles from pathlib import Path import configparser @@ -501,6 +502,21 @@ def configure_logging(): ) +def check_and_install_dependencies(): + """Check and install required dependencies""" + required_packages = [ + "uvicorn", + "tiktoken", + "fastapi", + # Add other required packages here + ] + + for package in required_packages: + if not pm.is_installed(package): + print(f"Installing {package}...") + pm.install(package) + print(f"{package} installed successfully") + def main(): # Check if running under Gunicorn if "GUNICORN_CMD_ARGS" in os.environ: @@ -508,6 +524,9 @@ def main(): print("Running under Gunicorn - worker management handled by Gunicorn") return + # Check and install dependencies + check_and_install_dependencies() + from multiprocessing import freeze_support freeze_support() diff --git a/run_with_gunicorn.py b/run_with_gunicorn.py index 644e6e87..e9d1adae 100755 --- a/run_with_gunicorn.py +++ b/run_with_gunicorn.py @@ -6,9 +6,24 @@ Start LightRAG server with Gunicorn import os import sys import signal +import pipmaster as pm from lightrag.api.utils_api import parse_args, display_splash_screen from lightrag.kg.shared_storage import initialize_share_data, finalize_share_data +def check_and_install_dependencies(): + """Check and install required dependencies""" + required_packages = [ + "gunicorn", + "tiktoken", + # Add other required packages here + ] + + for package in required_packages: + if not pm.is_installed(package): + print(f"Installing {package}...") + pm.install(package) + print(f"{package} installed successfully") + # Signal handler for graceful shutdown def signal_handler(sig, frame): @@ -25,6 +40,9 @@ def signal_handler(sig, frame): def main(): + # Check and install dependencies + check_and_install_dependencies() + # Register signal handlers for graceful shutdown signal.signal(signal.SIGINT, signal_handler) # Ctrl+C signal.signal(signal.SIGTERM, signal_handler) # kill command @@ -45,13 +63,6 @@ def main(): print(f"Workers setting: {args.workers}") print("=" * 80 + "\n") - # Check and install gunicorn if not present - import pipmaster as pm - - if not pm.is_installed("gunicorn"): - print("Installing gunicorn...") - pm.install("gunicorn") - # Import Gunicorn's StandaloneApplication from gunicorn.app.base import BaseApplication