Build failure under Termux: can not execute sklearn/_build_utils/version.py

### Describe the bug

When attempting to install the newest (and older) versions of scikit-learn-1.6.dev0 using regular pip install, the installation fails due to a missing version.py file. This issue occurs on an Android system using Termux.
Environment details:
OS: Linux localhost 4.14.186+ (Android)
Architecture: aarch64
Python: 3.11
The error occurs during the Meson build process, which tries to execute a non-existent file:
/data/data/com.termux/files/home/downloads/scikit-learn/sklearn/_build_utils/version.py
A workaround patch has been developed to address this issue:
```
#!/bin/bash

# Navigate to the scikit-learn directory, e.g.:
cd ~/downloads/scikit-learn

# Extract version from pyproject.toml and remove "dev" suffix
VERSION=$(grep 'version =' pyproject.toml | sed 's/version = "\(.*\)"/\1/' | sed 's/\.dev0//')

# Create the directory if it doesn't exist
mkdir -p sklearn/_build_utils

# Create the version.py file with the correct content
cat << EOF > sklearn/_build_utils/version.py
#!/usr/bin/env python
print('${VERSION}')
EOF

# Make the file executable
chmod +x sklearn/_build_utils/version.py

echo "Created sklearn/_build_utils/version.py with version ${VERSION}"
```
This patch:
- Extracts the version number from pyproject.toml
- Removes the "dev" suffix
- Creates the missing version.py file with a generic Python shebang
- Makes the file executable

After applying this patch, the Meson build process completes successfully, and the installation can proceed: 
```
cpu family: aarch64
Host machine cpu: aarch64
Compiler for C supports arguments -Wno-unused-but-set-variable: YE
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 python3 found: YES (/data/data/com.termux/files/usr/bin/python3.11)
Run-time dependency OpenMP for c found: YES 5.1
Found pkg-config: YES (/data/data/com.termux/files/usr/bin/pkg-config) 0.29.2
Run-time dependency python found: YES 3.11    Build targets in project: 111
Found ninja-1.11.1.git.kitware.jobserver-1 ...
```
and:
```
Successfully installed scikit-learn-1.6.dev0  ~/downloads/scikit-learn $
```

### Steps/Code to Reproduce

pip install -U -v scikit-learn

### Expected Results

.

### Actual Results

.

### Versions

```shell
scikit-learn-1.6.dev0, and older
```

COMMENT:
OK thanks for the additional details, so it seems like you are compiling numpy, scipy and scikit-learn from source. At least this is not something problematic with scikit-learn wheels.

To be honest to be more useful, someone should try to look into Termux to see if they can reproduce the issue. In the mean time your work-around is perfectly fine I guess, although I don't really understand it. The file should be here when you git clone the repo in your original attempt.

I am going to set this to "low-priority" since this probably does not affect too many users, at least this is the first time I hear about trying to install scikit-learn from source in Termux.

Searching a bit it seems like there are some projects that provides wheels for Termux, but only numpy and scipy right now:
https://github.com/termux-user-repository/tur/

Searching a bit more, it seems people compile everything from source inside Termux looking at https://github.com/search?q=repo%3Atermux%2Ftermux-packages+sklearn&type=issues.

I am still interested by your use case :wink: to understand the context and motivations. I understand scikit-learn is a dependency of a number some other packages but what is your end goal? Random possibilities:
- have fun and see how far you can push it by running Python projects on your phone
- run a particular application on your phone that would make your life easier
- package more Python projects on Termux to make them available for more Termux users
- something completely different

Labels: Build / CI, Low Priority