From ce246f6dfc7c8f92654e5ada6960d6d3d1f696b4 Mon Sep 17 00:00:00 2001 From: Jason Hunter Date: Wed, 12 Jun 2024 14:48:44 -0400 Subject: [PATCH] manually build pysqlite3 as binaries are only available for x86-64 --- docker/main/Dockerfile | 6 ++++++ docker/main/build_pysqlite3.sh | 30 +++++++++++++++++++++++++++++ docker/main/requirements-wheels.txt | 1 - 3 files changed, 36 insertions(+), 1 deletion(-) create mode 100755 docker/main/build_pysqlite3.sh diff --git a/docker/main/Dockerfile b/docker/main/Dockerfile index 1f00c7bca..47c8b31ed 100644 --- a/docker/main/Dockerfile +++ b/docker/main/Dockerfile @@ -114,6 +114,8 @@ RUN apt-get -qq update \ gfortran openexr libatlas-base-dev libssl-dev\ libtbb2 libtbb-dev libdc1394-22-dev libopenexr-dev \ libgstreamer-plugins-base1.0-dev libgstreamer1.0-dev \ + # sqlite3 dependencies + tclsh \ # scipy dependencies gcc gfortran libopenblas-dev liblapack-dev && \ rm -rf /var/lib/apt/lists/* @@ -127,6 +129,10 @@ RUN wget -q https://bootstrap.pypa.io/get-pip.py -O get-pip.py \ COPY docker/main/requirements.txt /requirements.txt RUN pip3 install -r /requirements.txt +# Build pysqlite3 from source to support ChromaDB +COPY docker/main/build_pysqlite3.sh /build_pysqlite3.sh +RUN /build_pysqlite3.sh + COPY docker/main/requirements-wheels.txt /requirements-wheels.txt RUN pip3 wheel --wheel-dir=/wheels -r /requirements-wheels.txt diff --git a/docker/main/build_pysqlite3.sh b/docker/main/build_pysqlite3.sh new file mode 100755 index 000000000..4e5ab6e6e --- /dev/null +++ b/docker/main/build_pysqlite3.sh @@ -0,0 +1,30 @@ +#!/bin/bash + +set -euxo pipefail + +# Fetch the source code for the latest release of Sqlite. +if [[ ! -d "sqlite" ]]; then + wget https://www.sqlite.org/src/tarball/sqlite.tar.gz?r=release -O sqlite.tar.gz + tar xzf sqlite.tar.gz + cd sqlite/ + LIBS="-lm" ./configure --disable-tcl --enable-tempstore=always + make sqlite3.c + cd ../ + rm sqlite.tar.gz +fi + +# Grab the pysqlite3 source code. +if [[ ! -d "./pysqlite3" ]]; then + git clone https://github.com/coleifer/pysqlite3.git +fi + +# Copy the sqlite3 source amalgamation into the pysqlite3 directory so we can +# create a self-contained extension module. +cp "sqlite/sqlite3.c" pysqlite3/ +cp "sqlite/sqlite3.h" pysqlite3/ + +# Create the wheels and strip symbols to produce manylinux wheels. +cd pysqlite3/ +sed -i "s|name='pysqlite3-binary'|name=PACKAGE_NAME|g" setup.py +python3 setup.py build_static +pip3 wheel . -w /wheels diff --git a/docker/main/requirements-wheels.txt b/docker/main/requirements-wheels.txt index 01e07cfd2..c6396d100 100644 --- a/docker/main/requirements-wheels.txt +++ b/docker/main/requirements-wheels.txt @@ -33,7 +33,6 @@ onnxruntime == 1.18.* openvino == 2024.1.* # Embeddings onnx_clip == 4.0.* -pysqlite3-binary == 0.5.2 chromadb == 0.5.0 # Generative AI google-generativeai == 0.6.*