Description
Labels: Bug
, Build / CI
, Needs Triage
(Suggested)
Describe the bug
Scikit-learn (v1.6.1) fails to build from source on a native Windows 11 ARM64 machine using the MSYS2 ClangARM64 toolchain. The build proceeds through the Meson setup phase correctly identifying the clang
compiler, but fails during the ninja
compilation phase with an error indicating it cannot create a specific, deeply nested intermediate build directory.
This occurs despite successfully building other complex dependencies like NumPy (v2.2.4) and SciPy (v1.15.2) from source in the exact same environment. Pandas (v2.2.3) also builds successfully after setting MESON_DISABLE_VSENV=1
(otherwise it incorrectly selects MSVC). This suggests the issue might be specific to how scikit-learn's build structure interacts with Meson/Ninja within this particular toolchain environment.
This is related to, but distinct from, #30567 which requests pre-built wheels. This issue focuses on a specific build-from-source failure.
Steps/Code to Reproduce
-
Environment Setup:
- OS: Windows 11 Pro ARM64 (via Parallels on Apple Silicon M2, or on native hardware like Windows Dev Kit 2023)
- MSYS2: Latest version, updated via
pacman -Syu
. - MSYS2 Environment:
CLANGARM64
shell launched. - Key MSYS2 Packages (installed via
pacman -S mingw-w64-clang-aarch64-<package>
):python
(3.12.x)clang
(20.1.1)flang
(20.1.1)meson
(1.7.0)ninja
(1.12.1)pkgconf
openblas
lapack
openssl
hdf5
rust
zlib
- Project Location: Tried both native MSYS2 path (
/home/user/project
) and WSL interop path (//wsl.localhost/Ubuntu/...
) - error persists in both.
-
Python Virtual Environment:
# In CLANGARM64 shell, navigate to project directory python -m venv .venv source .venv/bin/activate # Or Scripts/activate python -m pip install --upgrade pip setuptools wheel
-
Environment Variables: Before attempting install, set the following in the activated CLANGARM64 shell:
# Unset potential conflicts unset CL _CL_ OPENSSL_LIB_DIR OPENSSL_INCLUDE_DIR OPENSSL_DIR # Set compilers (though often picked up correctly by MSYS2 shell) export CC=clang export CXX=clang++ # Attempt to prevent Meson from activating MSVC (worked for Pandas) export MESON_DISABLE_VSENV=1 # Ensure pkg-config uses MSYS2 paths export PKG_CONFIG_PATH="/clangarm64/lib/pkgconfig:/clangarm64/share/pkgconfig" # Attempt to use short temporary paths (tried /tmp and C:/pip_build_temp) export TMPDIR="C:/pip_build_temp" # Or /tmp mkdir -p $TMPDIR
-
Attempt Installation:
python -m pip install --verbose scikit-learn==1.6.1 # (Or use `pip install -r requirements.txt` containing scikit-learn==1.6.1)
Expected Results
Scikit-learn==1.6.1 should build and install successfully, similar to how NumPy and SciPy do in the same configured environment.
Actual Results
The build process starts, Meson correctly identifies clang
, dependencies are resolved, Cython files are processed, but compilation fails during the Ninja execution phase.
The key error message is:
[...]
[48/251] Compiling Cython source C:/pip_build_temp/pip-install-.../scikit-learn.../utils/_fast_dict.pyx
ninja: error: mkdir(sklearn/metrics/_pairwise_distances_reduction/_middle_term_computer.cp312-mingw_aarch64_ucrt_llvm.pyd.p/sklearn/metrics/_pairwise_distances_reduction): No such file or directory
ninja: build stopped: .
[...]
error: subprocess-exited-with-error
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> See above for output.
[...]
error: metadata-generation-failed
(Note: The exact file being compiled just before the error ([48/251] in the log provided previously) might vary slightly, but the ninja: error: mkdir(...)
is consistent).
full log
full error trace
@energypc CLANGARM64 ~/projects_msys/func-ecopower-pwm-forecast-durable
$ python -m pip install --verbose scikit-learn==1.6.1
Using pip 25.0.1 from C:/msys64/home/oscar/projects_msys/func-ecopower-pwm-forecast-durable/.venv/lib/python3.12/site-packages/pip (python 3.12)
Collecting scikit-learn==1.6.1
Using cached scikit_learn-1.6.1.tar.gz (7.1 MB)
Running command pip subprocess to install build dependencies
Using pip 25.0.1 from C:/msys64/home/oscar/projects_msys/func-ecopower-pwm-forecast-durable/.venv/lib/python3.12/site-packages/pip (python 3.12)
Collecting meson-python>=0.16.0
Obtaining dependency information for meson-python>=0.16.0 from https://files.pythonhosted.org/packages/7d/ec/40c0ddd29ef4daa6689a2b9c5ced47d5b58fa54ae149b19e9a97f4979c8c/meson_python-0.17.1-py3-none-any.whl.metadata
Using cached meson_python-0.17.1-py3-none-any.whl.metadata (4.1 kB)
Collecting Cython>=3.0.10
Obtaining dependency information for Cython>=3.0.10 from https://files.pythonhosted.org/packages/27/6b/7c87867d255cbce8167ed99fc65635e9395d2af0f0c915428f5b17ec412d/Cython-3.0.12-py2.py3-none-any.whl.metadata
Using cached Cython-3.0.12-py2.py3-none-any.whl.metadata (3.3 kB)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.11'): https://files.pythonhosted.org/packages/3a/be/650f9c091ef71cb01d735775d554e068752d3ff63d7943b26316dc401749/numpy-1.21.2.zip (from https://pypi.org/simple/numpy/) (requires-python:>=3.7,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.11'): https://files.pythonhosted.org/packages/5f/d6/ad58ded26556eaeaa8c971e08b6466f17c4ac4d786cd3d800e26ce59cc01/numpy-1.21.3.zip (from https://pypi.org/simple/numpy/) (requires-python:>=3.7,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.11'): https://files.pythonhosted.org/packages/fb/48/b0708ebd7718a8933f0d3937513ef8ef2f4f04529f1f66ca86d873043921/numpy-1.21.4.zip (from https://pypi.org/simple/numpy/) (requires-python:>=3.7,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.11'): https://files.pythonhosted.org/packages/c2/a8/a924a09492bdfee8c2ec3094d0a13f2799800b4fdc9c890738aeeb12c72e/numpy-1.21.5.zip (from https://pypi.org/simple/numpy/) (requires-python:>=3.7,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.11'): https://files.pythonhosted.org/packages/45/b7/de7b8e67f2232c26af57c205aaad29fe17754f793404f59c8a730c7a191a/numpy-1.21.6.zip (from https://pypi.org/simple/numpy/) (requires-python:>=3.7,<3.11)
Collecting numpy>=2
Using cached numpy-2.2.4-cp312-cp312-mingw_aarch64_ucrt_llvm.whl
Link requires a different Python (3.12.9 not in: '>=3.7,<3.10'): https://files.pythonhosted.org/packages/99/f1/c00d6be56e1a718a3068079e3ec8ce044d7179345280f6a3f5066068af0d/scipy-1.6.2.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.7,<3.10)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.10'): https://files.pythonhosted.org/packages/fe/fd/8704c7b7b34cdac850485e638346025ca57c5a859934b9aa1be5399b33b7/scipy-1.6.3.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.7,<3.10)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.10'): https://files.pythonhosted.org/packages/bb/bb/944f559d554df6c9adf037aa9fc982a9706ee0e96c0d5beac701cb158900/scipy-1.7.0.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.7,<3.10)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.10'): https://files.pythonhosted.org/packages/47/33/a24aec22b7be7fdb10ec117a95e1e4099890d8bbc6646902f443fc7719d1/scipy-1.7.1.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.7,<3.10)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.11'): https://files.pythonhosted.org/packages/0e/23/58c4f995475a2a97cb5f4a032aedaf881ad87cd976a7180c55118d105a1d/scipy-1.7.2.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.7,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.7,<3.11'): https://files.pythonhosted.org/packages/61/67/1a654b96309c991762ee9bc39c363fc618076b155fe52d295211cf2536c7/scipy-1.7.3.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.7,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.11'): https://files.pythonhosted.org/packages/c0/ad/e3c052ed4e0027a8abef0a5e8441a044427d252d17d9aee06d56e62fc698/scipy-1.8.0rc1.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.11'): https://files.pythonhosted.org/packages/29/d2/151a54944b333e465f98804dced31dab1284f3c37b752b9cefa710b64681/scipy-1.8.0rc2.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.11'): https://files.pythonhosted.org/packages/e4/26/83dd1c6378513a6241d984bda9f08c512b6e35fff13fba3acc1b3c195f02/scipy-1.8.0rc3.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.11'): https://files.pythonhosted.org/packages/22/78/056cc43e7737811b6f50886788a940f852773dd9804f5365952805db9648/scipy-1.8.0rc4.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.11'): https://files.pythonhosted.org/packages/b4/a2/4faa34bf0cdbefd5c706625f1234987795f368eb4e97bde9d6f46860843e/scipy-1.8.0.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.11'): https://files.pythonhosted.org/packages/26/b5/9330f004b9a3b2b6a31f59f46f1617ce9ca15c0e7fe64288c20385a05c9d/scipy-1.8.1.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.11)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.12'): https://files.pythonhosted.org/packages/87/82/8b9bf8bb8030f1eef281ad2af87cc648e06e4a4974c2b9201a57d991b12c/scipy-1.9.0rc1.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.12)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.12'): https://files.pythonhosted.org/packages/5a/87/27f9ee75c32138d6eaabff2b91744c97a3fdbbbdd78948372dac93e0079f/scipy-1.9.0rc2.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.12)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.12'): https://files.pythonhosted.org/packages/57/72/484c38e5b814b48b41ac6432ef69077f2e7c8094925d3ce17bc3d61359b0/scipy-1.9.0rc3.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.12)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.12'): https://files.pythonhosted.org/packages/a8/e3/4ec401f609d34162b7023a09165da491630879e4cfa2336667fe2102cd06/scipy-1.9.0.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.12)
Link requires a different Python (3.12.9 not in: '>=3.8,<3.12'): https://files.pythonhosted.org/packages/db/af/16906139f52bc6866c43401869ce247662739ad71afa11c6f18505eb0546/scipy-1.9.1.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:>=3.8,<3.12)
Link requires a different Python (3.12.9 not in: '<3.12,>=3.8'): https://files.pythonhosted.org/packages/a2/ce/2592c3b550cf8f68879d4ff2159f3c689ee6f032f8fc9059022074f7bd75/scipy-1.10.0rc1.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:<3.12,>=3.8)
Link requires a different Python (3.12.9 not in: '<3.12,>=3.8'): https://files.pythonhosted.org/packages/6b/a3/7de758a32569e06877a6b298bdf7b529ce97a33c55deb2b1637b0162fd9d/scipy-1.10.0rc2.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:<3.12,>=3.8)
Link requires a different Python (3.12.9 not in: '<3.12,>=3.8'): https://files.pythonhosted.org/packages/d6/bd/2d13a273d95f7b7d9903c906c486040b0aebb85e008f93a5dd0891f21f1f/scipy-1.10.0.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:<3.12,>=3.8)
Link requires a different Python (3.12.9 not in: '<3.12,>=3.8'): https://files.pythonhosted.org/packages/84/a9/2bf119f3f9cff1f376f924e39cfae18dec92a1514784046d185731301281/scipy-1.10.1.tar.gz (from https://pypi.org/simple/scipy/) (requires-python:<3.12,>=3.8)
Collecting scipy>=1.6.0
Using cached scipy-1.15.2-cp312-cp312-mingw_aarch64_ucrt_llvm.whl
Collecting meson>=1.2.3 (from meson-python>=0.16.0)
Obtaining dependency information for meson>=1.2.3 from https://files.pythonhosted.org/packages/ab/3b/63fdad828b4cbeb49cef3aad26f3edfbc72f37a0ab54917d445ec0b9d9ff/meson-1.7.0-py3-none-any.whl.metadata
Using cached meson-1.7.0-py3-none-any.whl.metadata (1.8 kB)
Collecting packaging>=19.0 (from meson-python>=0.16.0)
Obtaining dependency information for packaging>=19.0 from https://files.pythonhosted.org/packages/88/ef/eb23f262cca3c0c4eb7ab1933c3b1f03d021f2c48f54763065b6f0e321be/packaging-24.2-py3-none-any.whl.metadata
Using cached packaging-24.2-py3-none-any.whl.metadata (3.2 kB)
Collecting pyproject-metadata>=0.7.1 (from meson-python>=0.16.0)
Obtaining dependency information for pyproject-metadata>=0.7.1 from https://files.pythonhosted.org/packages/7e/b1/8e63033b259e0a4e40dd1ec4a9fee17718016845048b43a36ec67d62e6fe/pyproject_metadata-0.9.1-py3-none-any.whl.metadata
Using cached pyproject_metadata-0.9.1-py3-none-any.whl.metadata (7.0 kB)
Using cached meson_python-0.17.1-py3-none-any.whl (27 kB)
Using cached Cython-3.0.12-py2.py3-none-any.whl (1.2 MB)
Using cached meson-1.7.0-py3-none-any.whl (990 kB)
Using cached packaging-24.2-py3-none-any.whl (65 kB)
Using cached pyproject_metadata-0.9.1-py3-none-any.whl (18 kB)
Installing collected packages: packaging, numpy, meson, Cython, scipy, pyproject-metadata, meson-python
Creating C:/pip_build_temp/pip-build-env-4z56ip4a/overlay/bin
Successfully installed Cython-3.0.12 meson-1.7.0 meson-python-0.17.1 numpy-2.2.4 packaging-24.2 pyproject-metadata-0.9.1 scipy-1.15.2
Installing build dependencies ... done
Running command Getting requirements to build wheel
Getting requirements to build wheel ... done
Running command Preparing metadata (pyproject.toml)
+ meson setup C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508 C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/.mesonpy-lhh9mbac -Dbuildtype=release -Db_ndebug=if-release -Db_vscrt=md --native-file=C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/.mesonpy-lhh9mbac/meson-python-native-file.ini
The Meson build system
Version: 1.7.0
Source dir: C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508
Build dir: C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/.mesonpy-lhh9mbac
Build type: native build
Project name: scikit-learn
Project version: 1.6.1
C compiler for the host machine: clang (clang 20.1.1 "clang version 20.1.1")
C linker for the host machine: clang ld.lld 20.1.1
C++ compiler for the host machine: clang++ (clang 20.1.1 "clang version 20.1.1")
C++ linker for the host machine: clang++ ld.lld 20.1.1
Cython compiler for the host machine: cython (cython 3.0.12)
Host machine cpu family: aarch64
Host machine cpu: aarch64
Compiler for C supports arguments -Wno-unused-but-set-variable: YES
Compiler for C supports arguments -Wno-unused-function: YES
Compiler for C supports arguments -Wno-conversion: YES
Compiler for C supports arguments -Wno-misleading-indentation: YES
Library m found: YES
Program python found: YES (C:/msys64/home/oscar/projects_msys/func-ecopower-pwm-forecast-durable/.venv/bin/python.exe)
Run-time dependency OpenMP for c found: YES 5.1
Found pkg-config: YES (C:\msys64\clangarm64\bin/pkg-config.EXE) 2.3.0
Run-time dependency python found: YES 3.12
Build targets in project: 111
scikit-learn 1.6.1
User defined options
Native files: C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/.mesonpy-lhh9mbac/meson-python-native-file.ini
b_ndebug : if-release
b_vscrt : md
buildtype : release
Found ninja.EXE-1.12.1 at C:\msys64\clangarm64\bin/ninja.EXE
+ meson compile
[1/251] Generating sklearn/metrics/_dist_metrics_pxd with a custom command
[2/251] Copying file sklearn/utils/_cython_blas.pxd
[3/251] Copying file sklearn/utils/__init__.py
[4/251] Copying file sklearn/__init__.py
[5/251] Copying file sklearn/utils/_openmp_helpers.pxd
[6/251] Generating sklearn/utils/_seq_dataset_pxd with a custom command
[7/251] Copying file sklearn/utils/_sorting.pxd
[8/251] Copying file sklearn/utils/_random.pxd
[9/251] Generating sklearn/utils/_weight_vector_pxd with a custom command
[10/251] Copying file sklearn/utils/_heap.pxd
[11/251] Copying file sklearn/_loss/_loss.pxd
[12/251] Copying file sklearn/utils/_vector_sentinel.pxd
[13/251] Generating sklearn/metrics/_pairwise_distances_reduction/_datasets_pair_pxd with a custom command
[14/251] Generating sklearn/metrics/_pairwise_distances_reduction/_base_pxd with a custom command
[15/251] Generating sklearn/metrics/_pairwise_distances_reduction/_radius_neighbors_pxd with a custom command
[16/251] Copying file sklearn/metrics/__init__.py
[17/251] Generating sklearn/neighbors/_binary_tree_pxi with a custom command
[18/251] Copying file sklearn/utils/_typedefs.pxd
[19/251] Generating sklearn/metrics/_pairwise_distances_reduction/_middle_term_computer_pxd with a custom command
[20/251] Generating sklearn/metrics/_pairwise_distances_reduction/_argkmin_pxd with a custom command
[21/251] Generating sklearn/_loss/_loss_pyx with a custom command
[22/251] Copying file sklearn/metrics/_pairwise_distances_reduction/__init__.py
[23/251] Copying file sklearn/metrics/_pairwise_distances_reduction/_classmode.pxd
[24/251] Copying file sklearn/linear_model/__init__.py
[25/251] Copying file sklearn/neighbors/_partition_nodes.pxd
[26/251] Copying file sklearn/neighbors/__init__.py
[27/251] Generating sklearn/utils/_weight_vector_pyx with a custom command
[28/251] Generating sklearn/utils/_seq_dataset_pyx with a custom command
[29/251] Generating sklearn/metrics/_dist_metrics_pyx with a custom command
[30/251] Generating sklearn/metrics/_pairwise_distances_reduction/_base_pyx with a custom command
[31/251] Generating sklearn/metrics/_pairwise_distances_reduction/_middle_term_computer_pyx with a custom command
[32/251] Generating sklearn/metrics/_pairwise_distances_reduction/_datasets_pair_pyx with a custom command
[33/251] Generating sklearn/metrics/_pairwise_distances_reduction/_argkmin_pyx with a custom command
[34/251] Generating sklearn/metrics/_pairwise_distances_reduction/_radius_neighbors_pyx with a custom command
[35/251] Generating sklearn/metrics/_pairwise_distances_reduction/_argkmin_classmode_pyx with a custom command
[36/251] Generating sklearn/metrics/_pairwise_distances_reduction/_radius_neighbors_classmode_pyx with a custom command
[37/251] Generating sklearn/linear_model/_sgd_fast_pyx with a custom command
[38/251] Generating sklearn/neighbors/_ball_tree_pyx with a custom command
[39/251] Generating sklearn/linear_model/_sag_fast_pyx with a custom command
[40/251] Generating sklearn/neighbors/_kd_tree_pyx with a custom command
[41/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/__check_build/_check_build.pyx
[42/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/utils/_openmp_helpers.pyx
[43/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/metrics/cluster/_expected_mutual_info_fast.pyx
[44/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/utils/_random.pyx
[45/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/utils/_heap.pyx
[46/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/_isotonic.pyx
[47/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/utils/murmurhash.pyx
[48/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/utils/_cython_blas.pyx
[49/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/utils/_fast_dict.pyx
[50/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/utils/_sorting.pyx
[51/251] Compiling Cython source C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508/sklearn/utils/arrayfuncs.pyx
ninja: error: mkdir(sklearn/metrics/_pairwise_distances_reduction/_middle_term_computer.cp312-mingw_aarch64_ucrt_llvm.pyd.p/sklearn/metrics/_pairwise_distances_reduction): No such file or directory
ninja: build stopped: .
INFO: autodetecting backend as ninja
INFO: calculating backend command to run: C:\msys64\clangarm64\bin/ninja.EXE
error: subprocess-exited-with-error
× Preparing metadata (pyproject.toml) did not run successfully.
│ exit code: 1
╰─> See above for output.
note: This error originates from a subprocess, and is likely not a problem with pip.
full command: C:/msys64/home/oscar/projects_msys/func-ecopower-pwm-forecast-durable/.venv/bin/python.exe C:/msys64/home/oscar/projects_msys/func-ecopower-pwm-forecast-durable/.venv/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py prepare_metadata_for_build_wheel C:/pip_build_temp/tmpx1jq7lm1
cwd: C:/pip_build_temp/pip-install-yjv7z3j9/scikit-learn_75cabb5c67ca4de1b01dff74d7ec4508
Preparing metadata (pyproject.toml) ... error
error: metadata-generation-failed
× Encountered error while generating package metadata.
╰─> See above for output.
note: This is an issue with the package mentioned above, not pip.
hint: See above for details.
(.venv)
oscar@pc CLANGARM64 ~/projects_msys/func-ecopower-pwm-forecast-durable
$
Collapsible until here.
(Cannot run sklearn.show_versions()
as installation failed)
- scikit-learn: 1.6.1 (attempted build from source)
- Python: 3.12.x (mingw-w64-clang-aarch64-python)
- OS: Windows 11 Pro 23H2 ARM64
- Compiler: Clang 20.1.1 (mingw-w64-clang-aarch64-clang)
- Meson: 1.7.0 (mingw-w64-clang-aarch64-meson)
- Ninja: 1.12.1 (mingw-w64-clang-aarch64-ninja)
- NumPy: 2.2.4 (built from source successfully in same venv)
- SciPy: 1.15.2 (built from source successfully in same venv as build dependency)
- MSYS2 Environment: CLANGARM64
Possible Cause:
The most likely cause is either hitting a path length limit within one of the build tools (Ninja?) despite OS support, or a bug in handling paths containing multiple dots or specific patterns like .pyd.p
within the MSYS2 Clang toolchain environment on Windows ARM64.
Thanks for looking into this! Building natively on Win ARM64 is becoming increasingly relevant. I thought this was a good place to start to gather any insights on the issue.