joshlk / k-means-constrained

K-Means clustering - constrained with minimum and maximum cluster size. Documentation: https://joshlk.github.io/k-means-constrained
https://github.com/joshlk/k-means-constrained
BSD 3-Clause "New" or "Revised" License
192 stars 43 forks source link

[BUG] Failed to build k-means-constrained #32

Closed ivan-zapreev closed 2 years ago

ivan-zapreev commented 2 years ago

Describe the bug When trying to install k-means-constrained 0.7.1 on a Linux machine under Spark, I get the following error:

Failed to build k-means-constrained

22/09/05 10:06:58 INFO SharedDriverContext: Failed to attach library dbfs:/FileStore/jars/df01ffad_9c82_47d0_af9f_d58e5a9167f7/web_extension-4.0-py3-none-any.whl to Spark
org.apache.spark.SparkException: Process List(/databricks/python/bin/pip, install, --upgrade, --find-links=/local_disk0/spark-418a7f7d-d386-417e-badc-e56ea3a21c6e/userFiles-6ca93792-2269-488d-b718-a0c3fb538085, /local_disk0/spark-418a7f7d-d386-417e-badc-e56ea3a21c6e/userFiles-6ca93792-2269-488d-b718-a0c3fb538085/activity_discovery_web_extension-4.0-py3-none-any.whl, --disable-pip-version-check) exited with code 1.   ERROR: Command errored out with exit status 1:
   command: /databricks/python3/bin/python /databricks/python3/lib/python3.8/site-packages/pip/_vendor/pep517/_in_process.py build_wheel /tmp/tmp4ehqh6yz
       cwd: /tmp/pip-install-_5fx8ys_/k-means-constrained_4ee597c098d6445ea4b8d6ca9744eeb4
  Complete output (38 lines):
  running bdist_wheel
  running build
  running build_py
  creating build
  creating build/lib.linux-x86_64-3.8
  creating build/lib.linux-x86_64-3.8/k_means_constrained
  copying k_means_constrained/mincostflow_vectorized.py -> build/lib.linux-x86_64-3.8/k_means_constrained
  copying k_means_constrained/__init__.py -> build/lib.linux-x86_64-3.8/k_means_constrained
  copying k_means_constrained/k_means_constrained_.py -> build/lib.linux-x86_64-3.8/k_means_constrained
  creating build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import
  copying k_means_constrained/sklearn_import/__init__.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import
  copying k_means_constrained/sklearn_import/fixes.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import
  copying k_means_constrained/sklearn_import/base.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import
  copying k_means_constrained/sklearn_import/funcsigs.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import
  copying k_means_constrained/sklearn_import/exceptions.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import
  creating build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/metrics
  copying k_means_constrained/sklearn_import/metrics/__init__.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/metrics
  copying k_means_constrained/sklearn_import/metrics/pairwise.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/metrics
  creating build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/utils
  copying k_means_constrained/sklearn_import/utils/__init__.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/utils
  copying k_means_constrained/sklearn_import/utils/sparsefuncs.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/utils
  copying k_means_constrained/sklearn_import/utils/fixes.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/utils
  copying k_means_constrained/sklearn_import/utils/extmath.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/utils
  copying k_means_constrained/sklearn_import/utils/validation.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/utils
  creating build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/preprocessing
  copying k_means_constrained/sklearn_import/preprocessing/__init__.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/preprocessing
  copying k_means_constrained/sklearn_import/preprocessing/data.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/preprocessing
  creating build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/externals
  copying k_means_constrained/sklearn_import/externals/__init__.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/externals
  copying k_means_constrained/sklearn_import/externals/funcsigs.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/externals
  creating build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/cluster
  copying k_means_constrained/sklearn_import/cluster/__init__.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/cluster
  copying k_means_constrained/sklearn_import/cluster/k_means_.py -> build/lib.linux-x86_64-3.8/k_means_constrained/sklearn_import/cluster
  running build_ext
  creating build/temp.linux-x86_64-3.8
  creating build/temp.linux-x86_64-3.8/k_means_constrained
  x86_64-linux-gnu-gcc -pthread -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O2 -Wall -g -fstack-protector-strong -Wformat -Werror=format-security -g -fwrapv -O2 -fPIC -I/tmp/pip-build-env-j0gh3wdg/overlay/lib/python3.8/site-packages/numpy/core/include -I/databricks/python3/include -I/usr/include/python3.8 -c k_means_constrained/mincostflow_vectorized_.c -o build/temp.linux-x86_64-3.8/k_means_constrained/mincostflow_vectorized_.o
  error: command 'x86_64-linux-gnu-gcc' failed: No such file or directory
  ----------------------------------------
  ERROR: Failed building wheel for k-means-constrained
ERROR: Could not build wheels for k-means-constrained which use PEP 517 and cannot be installed directly

Minimum working example pip install k_means_constrained

Versions:

IRunac commented 2 years ago

Encountered same issue today. No solution found so far.

ivan-zapreev commented 2 years ago

Encountered same issue today. No solution found so far.

I've solved it eventually by installing build essentials (on Ubuntu):

sudo apt -y install build-essential

However on Mac-OS I did not have to do that at all ...

Either way, if having gnu gcc is a per-requisite it would be good to have it noted in the installation instructions.

PS: For a Spark job via DataBricks the issue is solvable by providing the init script that installs the build essentials

joshlk commented 2 years ago

Im closing this for now. let me know if you require more assistance