Initial commit with translated description
This commit is contained in:
109
scripts/venv-setup.sh
Normal file
109
scripts/venv-setup.sh
Normal file
@@ -0,0 +1,109 @@
|
||||
#!/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"
|
||||
Reference in New Issue
Block a user