Skip to content

llm install llm-mlx failing with ERROR: Failed to build sentencepiece #19

Description

@epicwhale

Running into this error while trying to install this plugin as per instructions...

On a Mac 15.5 with M3 Max

❯ llm install llm-mlx
Collecting llm-mlx
  Using cached llm_mlx-0.4-py3-none-any.whl.metadata (6.6 kB)
Requirement already satisfied: llm>=0.24 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm-mlx) (0.26)
Collecting mlx-lm (from llm-mlx)
  Using cached mlx_lm-0.24.1-py3-none-any.whl.metadata (10 kB)
Requirement already satisfied: click in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (8.2.1)
Requirement already satisfied: condense-json>=0.1.3 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (0.1.3)
Requirement already satisfied: openai>=1.55.3 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (1.82.1)
Requirement already satisfied: click-default-group>=1.2.3 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (1.2.4)
Requirement already satisfied: sqlite-utils>=3.37 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (3.38)
Requirement already satisfied: sqlite-migrate>=0.1a2 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (0.1b0)
Requirement already satisfied: pydantic>=2.0.0 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (2.11.5)
Requirement already satisfied: PyYAML in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (6.0.2)
Requirement already satisfied: pluggy in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (1.6.0)
Requirement already satisfied: python-ulid in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (3.0.0)
Requirement already satisfied: setuptools in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (80.9.0)
Requirement already satisfied: pip in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (25.1.1)
Requirement already satisfied: puremagic in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from llm>=0.24->llm-mlx) (1.29)
Requirement already satisfied: anyio<5,>=3.5.0 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from openai>=1.55.3->llm>=0.24->llm-mlx) (4.9.0)
Requirement already satisfied: distro<2,>=1.7.0 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from openai>=1.55.3->llm>=0.24->llm-mlx) (1.9.0)
Requirement already satisfied: httpx<1,>=0.23.0 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from openai>=1.55.3->llm>=0.24->llm-mlx) (0.28.1)
Requirement already satisfied: jiter<1,>=0.4.0 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from openai>=1.55.3->llm>=0.24->llm-mlx) (0.10.0)
Requirement already satisfied: sniffio in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from openai>=1.55.3->llm>=0.24->llm-mlx) (1.3.1)
Requirement already satisfied: tqdm>4 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from openai>=1.55.3->llm>=0.24->llm-mlx) (4.67.1)
Requirement already satisfied: typing-extensions<5,>=4.11 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from openai>=1.55.3->llm>=0.24->llm-mlx) (4.13.2)
Requirement already satisfied: idna>=2.8 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from anyio<5,>=3.5.0->openai>=1.55.3->llm>=0.24->llm-mlx) (3.10)
Requirement already satisfied: certifi in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from httpx<1,>=0.23.0->openai>=1.55.3->llm>=0.24->llm-mlx) (2025.4.26)
Requirement already satisfied: httpcore==1.* in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from httpx<1,>=0.23.0->openai>=1.55.3->llm>=0.24->llm-mlx) (1.0.9)
Requirement already satisfied: h11>=0.16 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from httpcore==1.*->httpx<1,>=0.23.0->openai>=1.55.3->llm>=0.24->llm-mlx) (0.16.0)
Requirement already satisfied: annotated-types>=0.6.0 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from pydantic>=2.0.0->llm>=0.24->llm-mlx) (0.7.0)
Requirement already satisfied: pydantic-core==2.33.2 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from pydantic>=2.0.0->llm>=0.24->llm-mlx) (2.33.2)
Requirement already satisfied: typing-inspection>=0.4.0 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from pydantic>=2.0.0->llm>=0.24->llm-mlx) (0.4.1)
Requirement already satisfied: sqlite-fts4 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from sqlite-utils>=3.37->llm>=0.24->llm-mlx) (1.0.3)
Requirement already satisfied: tabulate in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from sqlite-utils>=3.37->llm>=0.24->llm-mlx) (0.9.0)
Requirement already satisfied: python-dateutil in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from sqlite-utils>=3.37->llm>=0.24->llm-mlx) (2.9.0.post0)
Collecting mlx>=0.25.0 (from mlx-lm->llm-mlx)
  Using cached mlx-0.25.2-cp313-cp313-macosx_15_0_arm64.whl.metadata (5.3 kB)
Collecting numpy (from mlx-lm->llm-mlx)
  Using cached numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl.metadata (62 kB)
Collecting transformers>=4.39.3 (from transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached transformers-4.52.4-py3-none-any.whl.metadata (38 kB)
Collecting protobuf (from mlx-lm->llm-mlx)
  Using cached protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl.metadata (593 bytes)
Collecting jinja2 (from mlx-lm->llm-mlx)
  Using cached jinja2-3.1.6-py3-none-any.whl.metadata (2.9 kB)
Collecting filelock (from transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached filelock-3.18.0-py3-none-any.whl.metadata (2.9 kB)
Collecting huggingface-hub<1.0,>=0.30.0 (from transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached huggingface_hub-0.32.3-py3-none-any.whl.metadata (14 kB)
Collecting packaging>=20.0 (from transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached packaging-25.0-py3-none-any.whl.metadata (3.3 kB)
Collecting regex!=2019.12.17 (from transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl.metadata (40 kB)
Collecting requests (from transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached requests-2.32.3-py3-none-any.whl.metadata (4.6 kB)
Collecting tokenizers<0.22,>=0.21 (from transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl.metadata (6.8 kB)
Collecting safetensors>=0.4.3 (from transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl.metadata (3.8 kB)
Collecting fsspec>=2023.5.0 (from huggingface-hub<1.0,>=0.30.0->transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached fsspec-2025.5.1-py3-none-any.whl.metadata (11 kB)
Collecting hf-xet<2.0.0,>=1.1.2 (from huggingface-hub<1.0,>=0.30.0->transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached hf_xet-1.1.2-cp37-abi3-macosx_11_0_arm64.whl.metadata (879 bytes)
Collecting sentencepiece!=0.1.92,>=0.1.91 (from transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached sentencepiece-0.2.0.tar.gz (2.6 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting MarkupSafe>=2.0 (from jinja2->mlx-lm->llm-mlx)
  Using cached MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl.metadata (4.0 kB)
Requirement already satisfied: six>=1.5 in ./.local/share/uv/tools/llm/lib/python3.13/site-packages (from python-dateutil->sqlite-utils>=3.37->llm>=0.24->llm-mlx) (1.17.0)
Collecting charset-normalizer<4,>=2 (from requests->transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl.metadata (35 kB)
Collecting urllib3<3,>=1.21.1 (from requests->transformers>=4.39.3->transformers[sentencepiece]>=4.39.3->mlx-lm->llm-mlx)
  Using cached urllib3-2.4.0-py3-none-any.whl.metadata (6.5 kB)
Using cached llm_mlx-0.4-py3-none-any.whl (11 kB)
Using cached mlx_lm-0.24.1-py3-none-any.whl (194 kB)
Using cached mlx-0.25.2-cp313-cp313-macosx_15_0_arm64.whl (30.4 MB)
Using cached transformers-4.52.4-py3-none-any.whl (10.5 MB)
Using cached huggingface_hub-0.32.3-py3-none-any.whl (512 kB)
Using cached hf_xet-1.1.2-cp37-abi3-macosx_11_0_arm64.whl (2.5 MB)
Using cached tokenizers-0.21.1-cp39-abi3-macosx_11_0_arm64.whl (2.7 MB)
Using cached fsspec-2025.5.1-py3-none-any.whl (199 kB)
Using cached numpy-2.2.6-cp313-cp313-macosx_14_0_arm64.whl (5.1 MB)
Using cached packaging-25.0-py3-none-any.whl (66 kB)
Using cached regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl (284 kB)
Using cached safetensors-0.5.3-cp38-abi3-macosx_11_0_arm64.whl (418 kB)
Using cached filelock-3.18.0-py3-none-any.whl (16 kB)
Using cached jinja2-3.1.6-py3-none-any.whl (134 kB)
Using cached MarkupSafe-3.0.2-cp313-cp313-macosx_11_0_arm64.whl (12 kB)
Using cached protobuf-6.31.1-cp39-abi3-macosx_10_9_universal2.whl (425 kB)
Using cached requests-2.32.3-py3-none-any.whl (64 kB)
Using cached charset_normalizer-3.4.2-cp313-cp313-macosx_10_13_universal2.whl (199 kB)
Using cached urllib3-2.4.0-py3-none-any.whl (128 kB)
Building wheels for collected packages: sentencepiece
  Building wheel for sentencepiece (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for sentencepiece (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [121 lines of output]
      /private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/dist.py:289: UserWarning: Unknown distribution option: 'test_suite'
        warnings.warn(msg)
      /private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
      !!

              ********************************************************************************
              Please consider removing the following classifiers in favor of a SPDX license expression:

              License :: OSI Approved :: Apache Software License

              See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
              ********************************************************************************

      !!
        self._finalize_license_expression()
      running bdist_wheel
      running build
      running build_py
      creating build/lib.macosx-11.0-arm64-cpython-313/sentencepiece
      copying src/sentencepiece/__init__.py -> build/lib.macosx-11.0-arm64-cpython-313/sentencepiece
      copying src/sentencepiece/_version.py -> build/lib.macosx-11.0-arm64-cpython-313/sentencepiece
      copying src/sentencepiece/sentencepiece_model_pb2.py -> build/lib.macosx-11.0-arm64-cpython-313/sentencepiece
      copying src/sentencepiece/sentencepiece_pb2.py -> build/lib.macosx-11.0-arm64-cpython-313/sentencepiece
      running build_ext
      /bin/sh: pkg-config: command not found
      ./build_bundled.sh: line 21: cmake: command not found
      ./build_bundled.sh: line 22: nproc: command not found
      ./build_bundled.sh: line 22: cmake: command not found
      Traceback (most recent call last):
        File "/Users/######/.local/share/uv/tools/llm/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
          main()
          ~~~~^^
        File "/Users/######/.local/share/uv/tools/llm/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 373, in main
          json_out["return_val"] = hook(**hook_input["kwargs"])
                                   ~~~~^^^^^^^^^^^^^^^^^^^^^^^^
        File "/Users/######/.local/share/uv/tools/llm/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 280, in build_wheel
          return _build_backend().build_wheel(
                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
              wheel_directory, config_settings, metadata_directory
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          )
          ^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 435, in build_wheel
          return _build(['bdist_wheel', '--dist-info-dir', str(metadata_directory)])
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 423, in _build
          return self._build_with_temp_dir(
                 ~~~~~~~~~~~~~~~~~~~~~~~~~^
              cmd,
              ^^^^
          ...<3 lines>...
              self._arbitrary_args(config_settings),
              ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          )
          ^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 404, in _build_with_temp_dir
          self.run_setup()
          ~~~~~~~~~~~~~~^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 512, in run_setup
          super().run_setup(setup_script=setup_script)
          ~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 317, in run_setup
          exec(code, locals())
          ~~~~^^^^^^^^^^^^^^^^
        File "<string>", line 169, in <module>
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/__init__.py", line 115, in setup
          return distutils.core.setup(**attrs)
                 ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/core.py", line 186, in setup
          return run_commands(dist)
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/core.py", line 202, in run_commands
          dist.run_commands()
          ~~~~~~~~~~~~~~~~~^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/dist.py", line 1002, in run_commands
          self.run_command(cmd)
          ~~~~~~~~~~~~~~~~^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/dist.py", line 1102, in run_command
          super().run_command(command)
          ~~~~~~~~~~~~~~~~~~~^^^^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command
          cmd_obj.run()
          ~~~~~~~~~~~^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/command/bdist_wheel.py", line 370, in run
          self.run_command("build")
          ~~~~~~~~~~~~~~~~^^^^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/cmd.py", line 357, in run_command
          self.distribution.run_command(command)
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/dist.py", line 1102, in run_command
          super().run_command(command)
          ~~~~~~~~~~~~~~~~~~~^^^^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command
          cmd_obj.run()
          ~~~~~~~~~~~^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/command/build.py", line 135, in run
          self.run_command(cmd_name)
          ~~~~~~~~~~~~~~~~^^^^^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/cmd.py", line 357, in run_command
          self.distribution.run_command(command)
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/dist.py", line 1102, in run_command
          super().run_command(command)
          ~~~~~~~~~~~~~~~~~~~^^^^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/dist.py", line 1021, in run_command
          cmd_obj.run()
          ~~~~~~~~~~~^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/command/build_ext.py", line 96, in run
          _build_ext.run(self)
          ~~~~~~~~~~~~~~^^^^^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/command/build_ext.py", line 368, in run
          self.build_extensions()
          ~~~~~~~~~~~~~~~~~~~~~^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/command/build_ext.py", line 484, in build_extensions
          self._build_extensions_serial()
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^
        File "/private/var/folders/jj/670rn_217vs_9q5y9yfxtlnw00k_x2/T/pip-build-env-i8egw4nr/overlay/lib/python3.13/site-packages/setuptools/_distutils/command/build_ext.py", line 510, in _build_extensions_serial
          self.build_extension(ext)
          ~~~~~~~~~~~~~~~~~~~~^^^^^
        File "<string>", line 87, in build_extension
        File "/Users/######/.local/share/uv/python/cpython-3.13.1-macos-aarch64-none/lib/python3.13/subprocess.py", line 419, in check_call
          raise CalledProcessError(retcode, cmd)
      subprocess.CalledProcessError: Command '['./build_bundled.sh', '0.2.0']' returned non-zero exit status 127.
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for sentencepiece
Failed to build sentencepiece
ERROR: Failed to build installable wheels for some pyproject.toml based projects (sentencepiece)

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions