110 lines
3.4 KiB
Bash
110 lines
3.4 KiB
Bash
|
|
#!/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"
|