Files
kesslerio_finance-news/scripts/venv-setup.sh

110 lines
3.4 KiB
Bash
Raw Normal View History

#!/usr/bin/env bash
# Finance News - venv Setup Script
# Creates or rebuilds the Python virtual environment
# Handles NixOS libstdc++ issues automatically
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BASE_DIR="$(cd "${SCRIPT_DIR}/.." && pwd)"
VENV_DIR="${BASE_DIR}/venv"
echo "📦 Finance News - venv Setup"
echo "============================"
echo ""
# Check Python version
PYTHON_BIN="${PYTHON_BIN:-python3}"
PYTHON_VERSION=$("$PYTHON_BIN" --version 2>&1)
echo "Using: $PYTHON_VERSION"
echo "Path: $(command -v "$PYTHON_BIN" 2>/dev/null || echo "$PYTHON_BIN")"
echo ""
# Remove existing venv if --force flag
if [[ "$1" == "--force" || "$1" == "-f" ]]; then
if [[ -d "$VENV_DIR" ]]; then
echo "🗑️ Removing existing venv..."
rm -rf "$VENV_DIR"
fi
fi
# Check if venv exists
if [[ -d "$VENV_DIR" ]]; then
echo "⚠️ venv already exists at $VENV_DIR"
echo " Use --force to rebuild"
exit 0
fi
# Create venv
echo "📁 Creating virtual environment..."
"$PYTHON_BIN" -m venv "$VENV_DIR"
# Activate venv
source "$VENV_DIR/bin/activate"
# Upgrade pip
echo "⬆️ Upgrading pip..."
pip install --upgrade pip --quiet
# Install requirements
echo "📥 Installing dependencies..."
pip install -r "$BASE_DIR/requirements.txt" --quiet
# NixOS-specific: Add LD_LIBRARY_PATH to activate script
if [[ -d "/nix/store" ]]; then
echo "🐧 NixOS detected - configuring libstdc++ path..."
ACTIVATE_SCRIPT="$VENV_DIR/bin/activate"
# Find libstdc++ path
LIBSTDCXX_PATH=""
if [[ -d "/home/linuxbrew/.linuxbrew/lib" ]]; then
LIBSTDCXX_PATH="/home/linuxbrew/.linuxbrew/lib"
elif [[ -d "$HOME/.linuxbrew/lib" ]]; then
LIBSTDCXX_PATH="$HOME/.linuxbrew/lib"
else
# Try nix store - only set if find returns a result
GCC_LIB_DIR=$(find /nix/store -maxdepth 2 -name "*-gcc-*-lib" -print -quit 2>/dev/null)
if [[ -n "$GCC_LIB_DIR" && -d "$GCC_LIB_DIR/lib" ]]; then
LIBSTDCXX_PATH="$GCC_LIB_DIR/lib"
fi
fi
if [[ -n "$LIBSTDCXX_PATH" && -d "$LIBSTDCXX_PATH" ]]; then
# Add to activate script if not already there
if ! grep -q "FINANCE_NEWS_LD_LIBRARY_PATH" "$ACTIVATE_SCRIPT"; then
cat >> "$ACTIVATE_SCRIPT" << EOF
# NixOS libstdc++ fix for numpy/yfinance (added by venv-setup.sh)
if [[ -z "\${FINANCE_NEWS_LD_LIBRARY_PATH:-}" ]]; then
export FINANCE_NEWS_LD_LIBRARY_PATH=1
if [[ -z "\${LD_LIBRARY_PATH:-}" ]]; then
export LD_LIBRARY_PATH="$LIBSTDCXX_PATH"
else
export LD_LIBRARY_PATH="$LIBSTDCXX_PATH:\$LD_LIBRARY_PATH"
fi
fi
EOF
echo " Added LD_LIBRARY_PATH=$LIBSTDCXX_PATH to activate script"
fi
else
echo " ⚠️ Could not find libstdc++.so.6 path"
echo " Install Linuxbrew: /bin/bash -c \"\$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)\""
fi
fi
# Verify installation
echo ""
echo "✅ venv created successfully!"
echo ""
echo "Verifying installation..."
"$VENV_DIR/bin/python3" -c "import feedparser; print(' ✓ feedparser')"
"$VENV_DIR/bin/python3" -c "import yfinance; print(' ✓ yfinance')" 2>/dev/null || echo " ⚠️ yfinance import failed (may need LD_LIBRARY_PATH)"
echo ""
echo "To activate manually:"
echo " source $VENV_DIR/bin/activate"
echo ""
echo "Or just use the CLI:"
echo " ./scripts/finance-news briefing --morning"