1

I'm trying to install the cvxopt library on Alpine Linux, which is required library for pm4py.

My docker file adds:

apk add --no-cache \
  gfortran \
  cmake \
  python3 \
  py3-scipy \
  py3-numpy \
  graphviz \
  xdg-utils \
  libxml2-dev \
  libxslt \
  openblas-dev

By typing:

pip install cvxopt

Error occurs, which states that it cannot find -llapack and -lblas:


/app_data/app # pip install cvxopt
Collecting cvxopt
  Using cached cvxopt-1.3.0.tar.gz (4.1 MB)
  Preparing metadata (setup.py) ... done
Installing collected packages: cvxopt
  Running setup.py install for cvxopt ... error
  error: subprocess-exited-with-error
  
  × Running setup.py install for cvxopt did not run successfully.
  │ exit code: 1
  ╰─> [35 lines of output]
      running install
      running build
      running build_py
      creating build
      creating build/lib.linux-x86_64-3.9
      creating build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/modeling.py -> build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/info.py -> build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/printing.py -> build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/misc.py -> build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/coneprog.py -> build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/solvers.py -> build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/cvxprog.py -> build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/_version.py -> build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/msk.py -> build/lib.linux-x86_64-3.9/cvxopt
      copying src/python/__init__.py -> build/lib.linux-x86_64-3.9/cvxopt
      UPDATING build/lib.linux-x86_64-3.9/cvxopt/_version.py
      set build/lib.linux-x86_64-3.9/cvxopt/_version.py to '1.3.0'
      running build_ext
      building 'base' extension
      creating build/temp.linux-x86_64-3.9
      creating build/temp.linux-x86_64-3.9/src
      creating build/temp.linux-x86_64-3.9/src/C
      gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/include/python3.9 -c src/C/base.c -o build/temp.linux-x86_64-3.9/src/C/base.o
      gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/include/python3.9 -c src/C/dense.c -o build/temp.linux-x86_64-3.9/src/C/dense.o
      src/C/dense.c: In function 'Matrix_NewFromPyBuffer':
      src/C/dense.c:277:28: warning: 'n.d' may be used uninitialized in this function [-Wmaybe-uninitialized]
        277 |        MAT_BUFD(a)[cnt] = n.d;
            |                           ~^~
      gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -fomit-frame-pointer -g -fno-semantic-interposition -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/include/python3.9 -c src/C/sparse.c -o build/temp.linux-x86_64-3.9/src/C/sparse.o
      gcc -shared -fno-semantic-interposition -fno-semantic-interposition build/temp.linux-x86_64-3.9/src/C/base.o build/temp.linux-x86_64-3.9/src/C/dense.o build/temp.linux-x86_64-3.9/src/C/sparse.o -L/usr/lib -L/usr/lib -lm -llapack -lblas -o build/lib.linux-x86_64-3.9/cvxopt/base.cpython-39-x86_64-linux-musl.so
      /usr/lib/gcc/x86_64-alpine-linux-musl/10.3.1/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -llapack
      /usr/lib/gcc/x86_64-alpine-linux-musl/10.3.1/../../../../x86_64-alpine-linux-musl/bin/ld: cannot find -lblas
      collect2: error: ld returned 1 exit status
      error: command '/usr/bin/gcc' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: legacy-install-failure

× Encountered error while trying to install package.
╰─> cvxopt

'''

If you want to replicate the error, you can use

docker pull ghcr.io/felixmarschall/process-management-amd64-addon:1.0.0

How can I solve this issue and install cvxopt?

I installed the needed dependencies by adding 'openblas-dev' and 'lapack' on Alpine Linux.

But cannot install cvxopt via pip.

Felix
  • 46
  • 4
  • 1
    Is it possible to switch to a Debian-based image? I believe that can use precompiled wheel-format archives, which won't require you to compile dependencies from source. – David Maze Feb 27 '23 at 19:20
  • I use it for a Home Assistant addon, would be great if it runs on Alpine. Wheels can be used on this platform too, but some are not as whl. available (e.g. cvxopt or numpy) – Felix Feb 27 '23 at 22:46

0 Answers0