Unstructured-IO / Unstructured-IO/unstructured
Vanilla `unstructured` via `uvx` fails with `Failed to build llvmlite`
Nobody has claimed this yet.
- Dominant language
- HTML
- Stars
- 15.5k
- Forks
- 1.3k
- Avg merge
- 4d 2h
- Merged PRs (30d)
- 13
Description
Describe the bug
When installing unstructured with uv, we are occasionally hit by such error messages, both on Python 3.13/3.14 on macOS, and on CI/GHA.
`llvmlite` (v0.36.0) was included because `pueblo[all]` (v0.0.0) depends on `unstructured` (v0.18.32) which depends on `numba` (v0.53.1) which depends on `llvmlite`
To Reproduce
uvx --python=3.14 unstructured --version
Expected behavior
Vanilla unstructured installs without ado, and sheds any problematic dependencies under corresponding extra sections, so they can be optionally selected.
References
- GH-4216
Screenshots
× Failed to build `llvmlite==0.48.0`
├─▶ The build backend returned an error
╰─▶ Call to `setuptools.build_meta:__legacy__.build_wheel` failed (exit status: 1)
[stdout]
running bdist_wheel
-- Configuring incomplete, errors occurred!
Running: cmake -G Unix Makefiles /Users/amo/.cache/uv/sdists-v9/pypi/llvmlite/0.48.0/x4aIZFmv-9FKFAEu/src/ffi
[stderr]
/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/_vendor/wheel/bdist_wheel.py:4: FutureWarning: The 'wheel' package is
no longer the canonical location of the 'bdist_wheel' command, and will be removed in a future release. Please update to setuptools v70.1 or later which
contains an integrated version of this command.
warn(
CMake Error at CMakeLists.txt:21 (find_package):
Could not find a package configuration file provided by "LLVM" with any of
the following names:
LLVM.cps
llvm.cps
LLVMConfig.cmake
llvm-config.cmake
Add the installation prefix of "LLVM" to CMAKE_PREFIX_PATH or set
"LLVM_DIR" to a directory containing one of the above files. If "LLVM"
provides a separate development package or SDK, be sure it has been
installed.
Traceback (most recent call last):
File "/Users/amo/.cache/uv/sdists-v9/pypi/llvmlite/0.48.0/x4aIZFmv-9FKFAEu/src/ffi/build.py", line 213, in <module>
main()
~~~~^^
File "/Users/amo/.cache/uv/sdists-v9/pypi/llvmlite/0.48.0/x4aIZFmv-9FKFAEu/src/ffi/build.py", line 207, in main
main_posix('.dylib')
~~~~~~~~~~^^^^^^^^^^
File "/Users/amo/.cache/uv/sdists-v9/pypi/llvmlite/0.48.0/x4aIZFmv-9FKFAEu/src/ffi/build.py", line 193, in main_posix
try_cmake(here_dir, build_dir, generator)
~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/amo/.cache/uv/sdists-v9/pypi/llvmlite/0.48.0/x4aIZFmv-9FKFAEu/src/ffi/build.py", line 127, in try_cmake
subprocess.check_call(args)
~~~~~~~~~~~~~~~~~~~~~^^^^^^
File "/usr/local/Cellar/python@3.14/3.14.6/Frameworks/Python.framework/Versions/3.14/lib/python3.14/subprocess.py", line 420, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['cmake', '-G', 'Unix Makefiles', '/Users/amo/.cache/uv/sdists-v9/pypi/llvmlite/0.48.0/x4aIZFmv-9FKFAEu/src/ffi']'
returned non-zero exit status 1.
Traceback (most recent call last):
File "<string>", line 11, in <module>
wheel_filename = backend.build_wheel("/Users/amo/.cache/uv/builds-v0/.tmpwbF1Qg", {}, None)
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/build_meta.py", line 438, in build_wheel
return _build(['bdist_wheel'])
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/build_meta.py", line 429, in _build
return self._build_with_temp_dir(
~~~~~~~~~~~~~~~~~~~~~~~~~^
cmd,
^^^^
...<3 lines>...
self._arbitrary_args(config_settings),
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
)
^
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/build_meta.py", line 410, in _build_with_temp_dir
self.run_setup()
~~~~~~~~~~~~~~^^
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/build_meta.py", line 520, in run_setup
super().run_setup(setup_script=setup_script)
~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/build_meta.py", line 317, in run_setup
exec(code, locals())
~~~~^^^^^^^^^^^^^^^^
File "<string>", line 200, in <module>
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/__init__.py", line 117, in setup
return distutils.core.setup(**attrs) # type: ignore[return-value]
~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/_distutils/core.py", line 186, in setup
return run_commands(dist)
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/_distutils/core.py", line 202, in run_commands
dist.run_commands()
~~~~~~~~~~~~~~~~~^^
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1001, in run_commands
self.run_command(cmd)
~~~~~~~~~~~~~~~~^^^^^
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/dist.py", line 1107, in run_command
super().run_command(command)
~~~~~~~~~~~~~~~~~~~^^^^^^^^^
File "/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/lib/python3.14/site-packages/setuptools/_distutils/dist.py", line 1020, in run_command
cmd_obj.run()
~~~~~~~~~~~^^
File "<string>", line 170, in run
File "<string>", line 62, in build_library_files
File "/usr/local/Cellar/python@3.14/3.14.6/Frameworks/Python.framework/Versions/3.14/lib/python3.14/subprocess.py", line 578, in run
raise CalledProcessError(retcode, process.args,
output=stdout, stderr=stderr)
subprocess.CalledProcessError: Command '['/Users/amo/.cache/uv/builds-v0/.tmpDuVfmH/bin/python',
'/Users/amo/.cache/uv/sdists-v9/pypi/llvmlite/0.48.0/x4aIZFmv-9FKFAEu/src/ffi/build.py']' returned non-zero exit status 1.
hint: `llvmlite` (v0.48.0) was included because `unstructured` (v0.23.1) depends on `numba` (v0.66.0) which depends on `llvmlite`
hint: Build failures usually indicate a problem with the package or the build environment
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by reproducing the issue with uvx --python=3.14 unstructured --version and inspect the package dependency declarations and extras. The change is done when vanilla unstructured installs without attempting to build llvmlite or numba, while those dependencies remain available through the appropriate optional extras.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- python
- Domain
- build-system, developer-experience
- Issue type
- Bug
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 52/100