Skip to content

[Bug]: Installation Fails on macOS M2 with Python 3.14 #5983

@jdalfons

Description

@jdalfons

What happened?

📝 Summary

When attempting to install chromadb ( version >=1.0.20), the installation fails exclusively on Python 3.14 due to a compilation error in the hnswlib dependency.

The installation succeeds without issue on Python 3.12. This suggests a compatibility problem with the new Python 3.14 version on macOS ARM64 (M2), likely requiring updated build scripts or pre-built binaries (wheels).


💥 Error Details

The build fails with a C++ header file not found error ('iostream' file not found) during the compilation of hnswlib.

Command Attempted

uv add chromadb>=1.0.20

Full Error Trace Snippet

Resolved 120 packages in 505ms
  × Failed to build hnswlib==0.8.0
  ├─▶ The build backend returned an error
  ╰─▶ Call to setuptools.build_meta.build_wheel failed (exit status: 1)

      [stderr]
      ./python_bindings/bindings.cpp:1:10: fatal error: 'iostream' file not found
          1 | #include <iostream>
            |          ^~~~~~~~~~
      1 error generated.
      error: command '/usr/bin/clang++' failed with exit code 1

      hint: This usually indicates a problem with the package or the build environment.

Versions

Operating System macOS (ARM64)
Hardware Apple M2 Chip
macOS Version Tahoe 26.1 (Latest Preview/Developer build)
Python Version (Fails) 3.14 (Installed via Homebrew: python@3.14)
Package Manager uv (Don't test yet using pip)
ChromaDB Version Trying to install >=1.0.20

Relevant log output

❯ uv add chromadb>1.0.20
Resolved 120 packages in 505ms
  × Failed to build `hnswlib==0.8.0`
  ├─▶ The build backend returned an error
  ╰─▶ Call to `setuptools.build_meta.build_wheel` failed (exit status: 1)

      [stdout]
      running bdist_wheel
      running build
      running build_ext
      clang++ -fno-strict-overflow -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -O3
      -Wall -I/opt/homebrew/opt/openssl@1.1/include -I[CACHE_PATH]/uv/builds-v0/.tmp[RANDOM_ID]/include
      -I/opt/homebrew/opt/python@3.14/Frameworks/Python.framework/Versions/3.14/include/python3.14
      -c [TEMP_PATH]/tmp[RANDOM_FILE_ID].cpp -o
      [TEMP_PATH]/tmp[RANDOM_FILE_ID].o -std=c++14
      clang++ -fno-strict-overflow -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -O3
      -Wall -I/opt/homebrew/opt/openssl@1.1/include -I[CACHE_PATH]/uv/builds-v0/.tmp[RANDOM_ID]/include
      -I/opt/homebrew/opt/python@3.14/Frameworks/Python.framework/Versions/3.14/include/python3.14
      -c [TEMP_PATH]/tmp[RANDOM_FILE_ID].cpp -o
      [TEMP_PATH]/tmp[RANDOM_FILE_ID].o -fvisibility=hidden
      checking avalability of flag: -march=native
      clang++ -fno-strict-overflow -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -O3
      -Wall -I/opt/homebrew/opt/openssl@1.1/include -I[CACHE_PATH]/uv/builds-v0/.tmp[RANDOM_ID]/include
      -I/opt/homebrew/opt/python@3.14/Frameworks/Python.framework/Versions/3.14/include/python3.14
      -c [TEMP_PATH]/tmp[RANDOM_FILE_ID].cpp -o
      [TEMP_PATH]/tmp[RANDOM_FILE_ID].o -march=native
      flag: -march=native is available
      building 'hnswlib' extension
      clang++ -fno-strict-overflow -Wsign-compare -Wunreachable-code -fno-common
      -dynamic -DNDEBUG -g -O3 -Wall -I/opt/homebrew/opt/openssl@1.1/include
      -I[CACHE_PATH]/uv/builds-v0/.tmp[RANDOM_ID]/lib/python3.14/site-packages/pybind11/include
      -I[CACHE_PATH]/uv/builds-v0/.tmp[RANDOM_ID]/lib/python3.14/site-packages/numpy/_core/include
      -I./hnswlib/ -I[CACHE_PATH]/uv/builds-v0/.tmp[RANDOM_ID]/include
      -I/opt/homebrew/opt/python@3.14/Frameworks/Python.framework/Versions/3.14/include/python3.14 -c
      ./python_bindings/bindings.cpp -o build/temp.macosx-15.0-arm64-cpython-314/python_bindings/bindings.o
      -O3 -march=native -stdlib=libc++ -mmacosx-version-min=10.7 -DVERSION_INFO=\"0.8.0\" -std=c++14
      -fvisibility=hidden

      [stderr]
      ./python_bindings/bindings.cpp:1:10: fatal error: 'iostream' file not found
          1 | #include <iostream>
            |          ^~~~~~~~~~
      1 error generated.
      error: command '/usr/bin/clang++' failed with exit code 1

      hint: This usually indicates a problem with the package or the build environment.
  help: If you want to add the package regardless of the failed resolution, provide the `--frozen` flag to
        skip locking and syncing.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions