milad_rm
milad_rm

Reputation: 13

I Can't install python shapely package on Alpine-based docker image

I try to build a custom docker image from nodered/node-red image (alpine-based). I use many ways and show many solution in google, but i still got error when installing shapely packege. My Dockerfile is:

FROM nodered/node-red
USER root
RUN apk update
RUN apk add py3-pip 
RUN pip install pymap3d
RUN apk --update add build-base libxslt-dev

RUN apk add --virtual .build-deps \
        --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing \
        --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \
        gcc libc-dev geos-dev geos && \
    runDeps="$(scanelf --needed --nobanner --recursive /usr/local \
    | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
    | xargs -r apk info --installed \
    | sort -u)" && \
    apk add --virtual .rundeps $runDeps

RUN geos-config --cflags

#RUN pip install --disable-pip-version-check shapely

RUN apk del build-base python3-dev && \
    rm -rf /var/cache/apk/*
RUN pip install shapely

I used any solution in internet but i can't fix error. I seen here and here and here and some other pages and my problem not solved. Update: docker build message is:

Step 10/10 : RUN pip install shapely
 ---> Running in a5f6d97702e7
Collecting shapely
  Downloading shapely-2.0.0.tar.gz (274 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 274.5/274.5 kB 956.0 kB/s eta 0:00:00
  Installing build dependencies: started
  Installing build dependencies: finished with status 'error'
  error: subprocess-exited-with-error
  
  × pip subprocess to install build dependencies did not run successfully.
  │ exit code: 1
  ╰─> [301 lines of output]
      Collecting Cython~=0.29
        Downloading Cython-0.29.32-cp310-cp310-musllinux_1_1_x86_64.whl (2.0 MB)
           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 2.0/2.0 MB 1.5 MB/s eta 0:00:00
      Collecting oldest-supported-numpy
        Downloading oldest_supported_numpy-2022.11.19-py3-none-any.whl (4.9 kB)
      Collecting setuptools>=61.0.0
        Downloading setuptools-65.6.3-py3-none-any.whl (1.2 MB)
           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 1.2/1.2 MB 1.6 MB/s eta 0:00:00
      Collecting numpy==1.21.6
        Downloading numpy-1.21.6.zip (10.3 MB)
           ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 10.3/10.3 MB 1.6 MB/s eta 0:00:00
        Installing build dependencies: started
        Installing build dependencies: finished with status 'done'
        Getting requirements to build wheel: started
        Getting requirements to build wheel: finished with status 'done'
        Preparing metadata (pyproject.toml): started
        Preparing metadata (pyproject.toml): finished with status 'done'
      Building wheels for collected packages: numpy
        Building wheel for numpy (pyproject.toml): started
        Building wheel for numpy (pyproject.toml): finished with status 'error'
        error: subprocess-exited-with-error
      
        × Building wheel for numpy (pyproject.toml) did not run successfully.
        │ exit code: 1
        ╰─> [270 lines of output]
            setup.py:63: RuntimeWarning: NumPy 1.21.6 may not yet support Python 3.10.
              warnings.warn(
            Running from numpy source directory.
            /tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/tools/cythonize.py:69: DeprecationWarning: The distutils package is deprecated and slated for removal in Python 3.12. Use setuptools or check PEP 632 for potential alternatives
              from distutils.version import LooseVersion
            Processing numpy/random/_bounded_integers.pxd.in
            Processing numpy/random/mtrand.pyx
            Processing numpy/random/_sfc64.pyx
            Processing numpy/random/bit_generator.pyx
            Processing numpy/random/_philox.pyx
            Processing numpy/random/_mt19937.pyx
            Processing numpy/random/_common.pyx
            Processing numpy/random/_generator.pyx
            Processing numpy/random/_pcg64.pyx
            Processing numpy/random/_bounded_integers.pyx.in
            Cythonizing sources
            blas_opt_info:
            blas_mkl_info:
            customize UnixCCompiler
              libraries mkl_rt not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            blis_info:
              libraries blis not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            openblas_info:
              libraries openblas not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            accelerate_info:
              NOT AVAILABLE
      
            atlas_3_10_blas_threads_info:
            Setting PTATLAS=ATLAS
              libraries tatlas not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            atlas_3_10_blas_info:
              libraries satlas not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            atlas_blas_threads_info:
            Setting PTATLAS=ATLAS
              libraries ptf77blas,ptcblas,atlas not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            atlas_blas_info:
              libraries f77blas,cblas,atlas not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            /tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/system_info.py:2026: UserWarning:
                Optimized (vendor) Blas libraries are not found.
                Falls back to netlib Blas library which has worse performance.
                A better performance should be easily gained by switching
                Blas library.
              if self._calc_info(blas):
            blas_info:
              libraries blas not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            /tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/system_info.py:2026: UserWarning:
                Blas (http://www.netlib.org/blas/) libraries not found.
                Directories to search for the libraries can be specified in the
                numpy/distutils/site.cfg file (section [blas]) or by setting
                the BLAS environment variable.
              if self._calc_info(blas):
            blas_src_info:
              NOT AVAILABLE
      
            /tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/system_info.py:2026: UserWarning:
                Blas (http://www.netlib.org/blas/) sources not found.
                Directories to search for the sources can be specified in the
                numpy/distutils/site.cfg file (section [blas_src]) or by setting
                the BLAS_SRC environment variable.
              if self._calc_info(blas):
              NOT AVAILABLE
      
            non-existing path in 'numpy/distutils': 'site.cfg'
            lapack_opt_info:
            lapack_mkl_info:
              libraries mkl_rt not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            openblas_lapack_info:
              libraries openblas not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            openblas_clapack_info:
              libraries openblas,lapack not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            flame_info:
              libraries flame not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            atlas_3_10_threads_info:
            Setting PTATLAS=ATLAS
              libraries lapack_atlas not found in /usr/local/lib
              libraries tatlas,tatlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries tatlas,tatlas not found in /usr/lib
              libraries lapack_atlas not found in /usr/lib/
              libraries tatlas,tatlas not found in /usr/lib/
            <class 'numpy.distutils.system_info.atlas_3_10_threads_info'>
              NOT AVAILABLE
      
            atlas_3_10_info:
              libraries lapack_atlas not found in /usr/local/lib
              libraries satlas,satlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries satlas,satlas not found in /usr/lib
              libraries lapack_atlas not found in /usr/lib/
              libraries satlas,satlas not found in /usr/lib/
            <class 'numpy.distutils.system_info.atlas_3_10_info'>
              NOT AVAILABLE
      
            atlas_threads_info:
            Setting PTATLAS=ATLAS
              libraries lapack_atlas not found in /usr/local/lib
              libraries ptf77blas,ptcblas,atlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries ptf77blas,ptcblas,atlas not found in /usr/lib
              libraries lapack_atlas not found in /usr/lib/
              libraries ptf77blas,ptcblas,atlas not found in /usr/lib/
            <class 'numpy.distutils.system_info.atlas_threads_info'>
              NOT AVAILABLE
      
            atlas_info:
              libraries lapack_atlas not found in /usr/local/lib
              libraries f77blas,cblas,atlas not found in /usr/local/lib
              libraries lapack_atlas not found in /usr/lib
              libraries f77blas,cblas,atlas not found in /usr/lib
              libraries lapack_atlas not found in /usr/lib/
              libraries f77blas,cblas,atlas not found in /usr/lib/
            <class 'numpy.distutils.system_info.atlas_info'>
              NOT AVAILABLE
      
            lapack_info:
              libraries lapack not found in ['/usr/local/lib', '/usr/lib', '/usr/lib/']
              NOT AVAILABLE
      
            /tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/system_info.py:1858: UserWarning:
                Lapack (http://www.netlib.org/lapack/) libraries not found.
                Directories to search for the libraries can be specified in the
                numpy/distutils/site.cfg file (section [lapack]) or by setting
                the LAPACK environment variable.
              return getattr(self, '_calc_info_{}'.format(name))()
            lapack_src_info:
              NOT AVAILABLE
      
            /tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/system_info.py:1858: UserWarning:
                Lapack (http://www.netlib.org/lapack/) sources not found.
                Directories to search for the sources can be specified in the
                numpy/distutils/site.cfg file (section [lapack_src]) or by setting
                the LAPACK_SRC environment variable.
              return getattr(self, '_calc_info_{}'.format(name))()
              NOT AVAILABLE
      
            numpy_linalg_lapack_lite:
              FOUND:
                language = c
                define_macros = [('HAVE_BLAS_ILP64', None), ('BLAS_SYMBOL_SUFFIX', '64_')]
      
            Warning: attempted relative import with no known parent package
            /usr/lib/python3.10/distutils/dist.py:274: UserWarning: Unknown distribution option: 'define_macros'
              warnings.warn(msg)
            running bdist_wheel
            running build
            running config_cc
            unifing config_cc, config, build_clib, build_ext, build commands --compiler options
            running config_fc
            unifing config_fc, config, build_clib, build_ext, build commands --fcompiler options
            running build_src
            build_src
            building py_modules sources
            creating build
            creating build/src.linux-x86_64-3.10
            creating build/src.linux-x86_64-3.10/numpy
            creating build/src.linux-x86_64-3.10/numpy/distutils
            building library "npymath" sources
            Could not locate executable gfortran
            Could not locate executable f95
            Could not locate executable ifort
            Could not locate executable ifc
            Could not locate executable lf95
            Could not locate executable pgfortran
            Could not locate executable nvfortran
            Could not locate executable f90
            Could not locate executable f77
            Could not locate executable fort
            Could not locate executable efort
            Could not locate executable efc
            Could not locate executable g77
            Could not locate executable g95
            Could not locate executable pathf95
            Could not locate executable nagfor
            Could not locate executable frt
            don't know how to compile Fortran code on platform 'posix'
            creating build/src.linux-x86_64-3.10/numpy/core
            creating build/src.linux-x86_64-3.10/numpy/core/src
            creating build/src.linux-x86_64-3.10/numpy/core/src/npymath
            conv_template:> build/src.linux-x86_64-3.10/numpy/core/src/npymath/npy_math_internal.h
              adding 'build/src.linux-x86_64-3.10/numpy/core/src/npymath' to include_dirs.
            conv_template:> build/src.linux-x86_64-3.10/numpy/core/src/npymath/ieee754.c
            conv_template:> build/src.linux-x86_64-3.10/numpy/core/src/npymath/npy_math_complex.c
            None - nothing done with h_files = ['build/src.linux-x86_64-3.10/numpy/core/src/npymath/npy_math_internal.h']
            building library "npyrandom" sources
            building extension "numpy.core._multiarray_tests" sources
            creating build/src.linux-x86_64-3.10/numpy/core/src/multiarray
            conv_template:> build/src.linux-x86_64-3.10/numpy/core/src/multiarray/_multiarray_tests.c
            building extension "numpy.core._multiarray_umath" sources
            Traceback (most recent call last):
              File "/tmp/tmp0bhr5u48_in_process.py", line 363, in <module>
                main()
              File "/tmp/tmp0bhr5u48_in_process.py", line 345, in main
                json_out['return_val'] = hook(**hook_input['kwargs'])
              File "/tmp/tmp0bhr5u48_in_process.py", line 261, in build_wheel
                return _build_backend().build_wheel(wheel_directory, config_settings,
              File "/tmp/pip-build-env-eya7durf/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 230, in build_wheel
                return self._build_with_temp_dir(['bdist_wheel'], '.whl',
              File "/tmp/pip-build-env-eya7durf/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 215, in _build_with_temp_dir
                self.run_setup()
              File "/tmp/pip-build-env-eya7durf/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 267, in run_setup
                super(_BuildMetaLegacyBackend,
              File "/tmp/pip-build-env-eya7durf/overlay/lib/python3.10/site-packages/setuptools/build_meta.py", line 158, in run_setup
                exec(compile(code, __file__, 'exec'), locals())
              File "setup.py", line 448, in <module>
                setup_package()
              File "setup.py", line 440, in setup_package
                setup(**metadata)
              File "/tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/core.py", line 169, in setup
                return old_setup(**new_attr)
              File "/tmp/pip-build-env-eya7durf/overlay/lib/python3.10/site-packages/setuptools/__init__.py", line 153, in setup
                return distutils.core.setup(**attrs)
              File "/usr/lib/python3.10/distutils/core.py", line 148, in setup
                dist.run_commands()
              File "/usr/lib/python3.10/distutils/dist.py", line 966, in run_commands
                self.run_command(cmd)
              File "/usr/lib/python3.10/distutils/dist.py", line 985, in run_command
                cmd_obj.run()
              File "/tmp/pip-build-env-eya7durf/overlay/lib/python3.10/site-packages/wheel/bdist_wheel.py", line 299, in run
                self.run_command('build')
              File "/usr/lib/python3.10/distutils/cmd.py", line 313, in run_command
                self.distribution.run_command(command)
              File "/usr/lib/python3.10/distutils/dist.py", line 985, in run_command
                cmd_obj.run()
              File "/tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/command/build.py", line 61, in run
                old_build.run(self)
              File "/usr/lib/python3.10/distutils/command/build.py", line 135, in run
                self.run_command(cmd_name)
              File "/usr/lib/python3.10/distutils/cmd.py", line 313, in run_command
                self.distribution.run_command(command)
              File "/usr/lib/python3.10/distutils/dist.py", line 985, in run_command
                cmd_obj.run()
              File "/tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/command/build_src.py", line 144, in run
                self.build_sources()
              File "/tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/command/build_src.py", line 161, in build_sources
                self.build_extension_sources(ext)
              File "/tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/command/build_src.py", line 318, in build_extension_sources
                sources = self.generate_sources(sources, ext)
              File "/tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/distutils/command/build_src.py", line 378, in generate_sources
                source = func(extension, build_dir)
              File "/tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/core/setup.py", line 434, in generate_config_h
                moredefs, ignored = cocache.check_types(config_cmd, ext, build_dir)
              File "/tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/core/setup.py", line 44, in check_types
                out = check_types(*a, **kw)
              File "/tmp/pip-install-frs2c34j/numpy_afe54773ba8d409e8f86463616547cf4/numpy/core/setup.py", line 289, in check_types
                raise SystemError(
            SystemError: Cannot compile 'Python.h'. Perhaps you need to install python-dev|python-devel.
            [end of output]
      
        note: This error originates from a subprocess, and is likely not a problem with pip.
        ERROR: Failed building wheel for numpy
      Failed to build numpy
      ERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projects
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: subprocess-exited-with-error

× pip subprocess to install build dependencies 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.

Upvotes: 0

Views: 1524

Answers (1)

akathimi
akathimi

Reputation: 1581

From this: https://github.com/docker-library/python/issues/381#issuecomment-463880366 I added the suggestion in the Dockerfile and the build now succeeds.

New Dockerfile:

FROM nodered/node-red
USER root
RUN apk update
RUN apk add py3-pip 
RUN pip install pymap3d
RUN apk --update add build-base libxslt-dev

RUN apk add --virtual .build-deps \
        --repository http://dl-cdn.alpinelinux.org/alpine/edge/testing \
        --repository http://dl-cdn.alpinelinux.org/alpine/edge/main \
        gcc libc-dev geos-dev geos && \
    runDeps="$(scanelf --needed --nobanner --recursive /usr/local \
    | awk '{ gsub(/,/, "\nso:", $2); print "so:" $2 }' \
    | xargs -r apk info --installed \
    | sort -u)" && \
    apk add --virtual .rundeps $runDeps

RUN geos-config --cflags

#RUN pip install --disable-pip-version-check shapely

#RUN apk del build-base python3-dev && \
 #   rm -rf /var/cache/apk/*
RUN apk add --no-cache python3-dev libstdc++ && \
    apk add --no-cache g++ && \
    ln -s /usr/include/locale.h /usr/include/xlocale.h && \
    pip3 install numpy && \
    pip3 install pandas

RUN pip install shapely

Build output: output

Upvotes: 1

Related Questions