FROM python:3.11-slim ENV PYTHONDONTWRITEBYTECODE=1 \ PYTHONUNBUFFERED=1 \ DEBIAN_FRONTEND=noninteractive \ PIP_NO_CACHE_DIR=1 # -------------------------------------------------------------------- # System deps for builds (numpy/scipy, lxml, TA-Lib) + unixODBC + MS ODBC # -------------------------------------------------------------------- RUN set -eux; \ apt-get update; \ apt-get install -y --no-install-recommends \ build-essential curl wget git ca-certificates gnupg apt-transport-https \ libxml2-dev libxslt1-dev zlib1g-dev \ libjpeg-dev libpng-dev \ libopenblas-dev liblapack-dev gfortran \ unixodbc unixodbc-dev; \ # Add Microsoft repo key (no apt-key) and point to Debian 12 (bookworm) curl -fsSL https://packages.microsoft.com/keys/microsoft.asc \ | gpg --dearmor -o /usr/share/keyrings/microsoft-prod.gpg; \ echo "deb [arch=amd64 signed-by=/usr/share/keyrings/microsoft-prod.gpg] https://packages.microsoft.com/debian/12/prod bookworm main" \ > /etc/apt/sources.list.d/microsoft-prod.list; \ apt-get update; \ ACCEPT_EULA=Y apt-get install -y --no-install-recommends msodbcsql18 mssql-tools18; \ rm -rf /var/lib/apt/lists/* # ------------------------------------------------- # Build and install TA-Lib C library (as you had) # ------------------------------------------------- RUN set -ex \ && curl -fsSL -o /tmp/ta-lib.tgz http://prdownloads.sourceforge.net/ta-lib/ta-lib-0.4.0-src.tar.gz \ && tar -xzf /tmp/ta-lib.tgz -C /tmp \ && cd /tmp/ta-lib* \ && ./configure --prefix=/usr \ && make \ && make install \ && rm -rf /tmp/ta-lib* /tmp/ta-lib.tgz WORKDIR /app # -------------------------- # Python deps (layer cache) # -------------------------- COPY requirements.txt /app/requirements.txt RUN python -m pip install --upgrade pip && \ pip install --no-cache-dir -r /app/requirements.txt # PyTorch CPU RUN pip install --no-cache-dir --index-url https://download.pytorch.org/whl/cpu \ torch torchvision torchaudio # NLTK data ENV NLTK_DATA=/usr/local/share/nltk_data RUN mkdir -p "$NLTK_DATA" && \ python -c "import nltk; nltk.download('vader_lexicon', download_dir='$NLTK_DATA')" # App code COPY . /app # Gunicorn entrypoint (Hugging Face sets $PORT) CMD ["bash", "-lc", "gunicorn -w 1 -k gthread -b 0.0.0.0:${PORT:-7860} pytrade:app --timeout 180"]