Require Python >=3.14 and drop apsw dependency - #54
Merged
Conversation
Python 3.14 bundles SQLite 3.50.4 (>= 3.38), which satisfies vectorlite's metadata (rowid) filter requirement. The stdlib sqlite3 module can now be used everywhere, so apsw is no longer needed. - Bump requires-python to >=3.14 in pyproject.toml - Migrate Python integration tests from apsw to stdlib sqlite3 (apsw.SQLError -> sqlite3.OperationalError, getdescription() -> description) - Remove apsw from requirements-dev.txt, cibuildwheel test-requires, and CI - Rewrite examples to use sqlite3; drop USE_BUILTIN_SQLITE3 branching in index_serde.py - Update README, getting-started, examples and benchmark docs; keep the SQLite >= 3.38 requirement and note Python 3.14 bundles SQLite 3.50.4 Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
The prebuilt CPython interpreters used by cibuildwheel (manylinux, macOS, Windows) and actions/setup-python ship a sqlite3 module compiled without loadable-extension support, so they cannot load the vectorlite extension. apsw was previously used to work around this on all platforms. To drop apsw entirely while keeping full cross-platform coverage, test the built wheels with a uv-managed CPython 3.14, whose sqlite3 has loadable extensions enabled and bundles SQLite 3.50.x (>= 3.38). - pyproject.toml: make [tool.cibuildwheel] build-only (drop test-requires / test-command) - ci.yml: install uv + Python 3.14, create a venv, and run the integration tests, examples and benchmark against the built wheel with that interpreter - ci.yml: drop pytest/numpy/apsw from the host cibuildwheel install step Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
1yefuwang1
added a commit
that referenced
this pull request
Jun 23, 2026
* docs: add design for comprehensive Python integration regression suite Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: add implementation plan for Python integration regression suite Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * docs: migrate test plan and spec from apsw to stdlib sqlite3 apsw was dropped on main (PR #54); Python >=3.14 stdlib sqlite3 (SQLite 3.50.4) now provides loadable extensions and the required SQLite version. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: add shared helpers and fixtures for integration suite Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: characterize vector_distance, json, and vectorlite_info scalar functions Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: characterize vector column round-trip and quantization tolerances Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: characterize knn_search ordering, parameters, and filters Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: characterize DDL element types, spaces, and hnsw option parsing Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: characterize DML edge cases (update, capacity, replace-deleted) Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * test: characterize save/load persistence and table lifecycle Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> * ci: run on push to main to warm vcpkg binary cache CI only triggered on pull_request and workflow_dispatch, so the default branch never populated the vcpkg binary cache. GitHub Actions caches are branch-scoped, so every PR started cold and recompiled all vcpkg deps from source (~20m on the Intel macOS runner). Add a push trigger on main so the cache is saved on the default branch and restorable by all PRs. Tighten the upload/publish job conditions to require workflow_dispatch so the new push trigger does not spawn empty publish jobs on every merge. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --------- Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Python 3.14 bundles SQLite 3.50.4 (>= 3.38), which satisfies vectorlite's metadata (rowid) filter requirement. The stdlib
sqlite3module can now be used everywhere, so the apsw dependency is no longer needed and is dropped.Changes
Version requirement
pyproject.toml:requires-python = ">=3.14"Tests & build infra (apsw removed)
bindings/python/vectorlite_py/test/vectorlite_test.py: migrated to stdlibsqlite3(apsw.SQLError→sqlite3.OperationalError,getdescription()→description)requirements-dev.txt,pyproject.tomlcibuildwheeltest-requires,.github/workflows/ci.yml: removed apswExamples (rewritten to
sqlite3)quickstart.py,metadata_filter.py,hnsw_param.py,index_serde.py(dropped theUSE_BUILTIN_SQLITE3/apsw branching),requirements.txt,examples/README.mdDocs
README.md,doc/markdown/getting-started.md,benchmark/README.md,benchmark/benchmark.py: install line usespip install vectorlite-py numpy; code usessqlite3. The SQLite >= 3.38 requirement is kept, with a note that Python 3.14 bundles SQLite 3.50.4.Verification