import os import sys import subprocess import logging from pathlib import Path # Setup logging logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def check_python_version(): """Check if Python version is compatible""" if sys.version_info < (3, 11): logger.error("Python 3.11 or higher is required") sys.exit(1) logger.info(f"Python version {sys.version_info.major}.{sys.version_info.minor} detected") def create_virtual_environment(): """Create and activate virtual environment""" venv_name = "synthex_env" if not os.path.exists(venv_name): logger.info(f"Creating virtual environment: {venv_name}") subprocess.run([sys.executable, "-m", "venv", venv_name], check=True) else: logger.info(f"Virtual environment {venv_name} already exists") def install_requirements(): """Install required packages""" logger.info("Installing requirements...") subprocess.run([sys.executable, "-m", "pip", "install", "-r", "requirements.txt"], check=True) def create_directories(): """Create necessary directories""" directories = [ "data/raw", "data/processed", "data/reports", "data/reports/plots" ] for directory in directories: Path(directory).mkdir(parents=True, exist_ok=True) logger.info(f"Created directory: {directory}") def setup_environment(): """Setup the complete environment""" try: logger.info("Starting environment setup...") # Check Python version check_python_version() # Create virtual environment create_virtual_environment() # Install requirements install_requirements() # Create directories create_directories() logger.info("Environment setup completed successfully!") logger.info("\nNext steps:") logger.info("1. Activate the virtual environment:") logger.info(" - Windows: synthex_env\\Scripts\\activate") logger.info(" - Unix/MacOS: source synthex_env/bin/activate") logger.info("2. Run data collection: python setup_data.py") logger.info("3. Analyze data quality: python analyze_data_quality.py") except subprocess.CalledProcessError as e: logger.error(f"Error during setup: {str(e)}") sys.exit(1) except Exception as e: logger.error(f"Unexpected error: {str(e)}") sys.exit(1) if __name__ == "__main__": setup_environment()