From e357ef397b3324edec4104756155a8836b03ed65 Mon Sep 17 00:00:00 2001 From: Trayan Azarov Date: Fri, 6 Oct 2023 18:09:56 +0300 Subject: [PATCH] [BUG]: Python client sqlite issue (#1211) Refs: #1206 ## Description of changes *Summarize the changes made by this PR.* - Improvements & Bug fixes - Conditional import of sqlite for python client ## Test plan *How are these changes tested?* - [x] Tests pass locally with `pytest` for python Additional test in older disto (debian buster) was run: ``` pip install chromadb-client root@c26a0fadfcdc:~# python Python 3.10.12 (main, Jun 13 2023, 12:02:28) [GCC 8.3.0] on linux Type "help", "copyright", "credits" or "license" for more information. >>> import sqlite3 >>> print(sqlite3.sqlite_version_info) (3, 27, 2) >>> import chromadb >>> ``` ## Documentation Changes N/A --- chromadb/__init__.py | 42 +++++++++++++++++++++++++----------------- 1 file changed, 25 insertions(+), 17 deletions(-) diff --git a/chromadb/__init__.py b/chromadb/__init__.py index aa5a3edd7ea..ffc32392e07 100644 --- a/chromadb/__init__.py +++ b/chromadb/__init__.py @@ -1,6 +1,5 @@ from typing import Dict import logging -import sqlite3 import chromadb.config from chromadb.config import Settings, System from chromadb.api import API @@ -54,22 +53,31 @@ except ImportError: IN_COLAB = False -if sqlite3.sqlite_version_info < (3, 35, 0): - if IN_COLAB: - # In Colab, hotswap to pysqlite-binary if it's too old - import subprocess - import sys - - subprocess.check_call( - [sys.executable, "-m", "pip", "install", "pysqlite3-binary"] - ) - __import__("pysqlite3") - sys.modules["sqlite3"] = sys.modules.pop("pysqlite3") - else: - raise RuntimeError( - "\033[91mYour system has an unsupported version of sqlite3. Chroma requires sqlite3 >= 3.35.0.\033[0m\n" - "\033[94mPlease visit https://docs.trychroma.com/troubleshooting#sqlite to learn how to upgrade.\033[0m" - ) +is_client = False +try: + from chromadb.is_thin_client import is_thin_client # type: ignore + is_client = is_thin_client +except ImportError: + is_client = False + +if not is_client: + import sqlite3 + if sqlite3.sqlite_version_info < (3, 35, 0): + if IN_COLAB: + # In Colab, hotswap to pysqlite-binary if it's too old + import subprocess + import sys + + subprocess.check_call( + [sys.executable, "-m", "pip", "install", "pysqlite3-binary"] + ) + __import__("pysqlite3") + sys.modules["sqlite3"] = sys.modules.pop("pysqlite3") + else: + raise RuntimeError( + "\033[91mYour system has an unsupported version of sqlite3. Chroma requires sqlite3 >= 3.35.0.\033[0m\n" + "\033[94mPlease visit https://docs.trychroma.com/troubleshooting#sqlite to learn how to upgrade.\033[0m" + ) def configure(**kwargs) -> None: # type: ignore