Docker ошибка сборки контейнера при установке python зависимостей - PullRequest
1 голос
/ 02 марта 2020

Я пытаюсь создать довольно простой Docker образ, в котором размещено небольшое приложение python, но по какой-то неизвестной причине я терплю неудачу, и я безуспешно пытался решить все, что мог.

До этого я ничего не делал с Docker, поэтому, возможно, это что-то тривиальное.

Итак, вот файл Docker:

FROM python:3.7-alpine3.10

LABEL Name=foo/barVersion=0.0.1
EXPOSE 8080

WORKDIR /app
ADD . /app

RUN pip3 install --no-cache-dir -U pip
RUN pip3 install --no-cache-dir -r requirements.txt

CMD ["python3", "./src/main.py"]

Так что это довольно просто - захватить образ alpine и python 3.7, поместить поверх него код python и установить зависимости - должно быть просто. Но это не так, как pip install всегда терпит неудачу с:

Collecting numpy==1.18.1
  Downloading numpy-1.18.1.zip (5.4 MB)
  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 wheel metadata: started
    Preparing wheel metadata: finished with status 'error'
    ERROR: Command errored out with exit status 1:

, и я просто не знаю, почему.

Этот пакет доступен локально, и я могу установить его заново, но его нет, когда Я пытаюсь загрузить его в контейнер.

И это сгенерированный файл require.txt pip

astroid==2.0.4
beautifulsoup4==4.6.3
bs4==0.0.1
Click==7.0
colorama==0.4.0
Django==2.1.3
feedparser==5.2.1
Flask==1.1.1
Flask-API==2.0
Flask-Jsonpify==1.5.0
image==1.5.27
isort==4.3.4
itsdangerous==1.1.0
Jinja2==2.11.1
jsonify==0.5
lazy-object-proxy==1.3.1
MarkupSafe==1.1.1
mccabe==0.6.1
numpy==1.18.1
pandas==1.0.1
patsy==0.5.1
Pillow==5.3.0
pydelicious==0.6
pylint==2.1.1
python-dateutil==2.8.1
pytz==2018.7
rope==0.11.0
scipy==1.4.1
six==1.11.0
statsmodels==0.11.1
Werkzeug==1.0.0
wrapt==1.10.11

Заранее спасибо!

1 Ответ

0 голосов
/ 02 марта 2020

Я мог бы воспроизвести это. Я создаю следующий Docker образ:

FROM python:3.7-alpine3.10 
RUN python3 -m pip install numpy==1.18.1

    ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python3 /usr/local/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpvsgckc6m
         cwd: /tmp/pip-install-crny84w2/numpy
    Complete output (223 lines):
    Processing numpy/random/_bounded_integers.pxd.in
    Processing numpy/random/_bounded_integers.pyx.in
    Processing numpy/random/_mt19937.pyx
    Processing numpy/random/mtrand.pyx
    Processing numpy/random/_bit_generator.pyx
    Processing numpy/random/_sfc64.pyx
    Processing numpy/random/_pcg64.pyx
    Processing numpy/random/_generator.pyx
    Processing numpy/random/_common.pyx
    Processing numpy/random/_philox.pyx
    Cythonizing sources
    blas_opt_info:
    blas_mkl_info:
    customize UnixCCompiler
      libraries mkl_rt not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    blis_info:
      libraries blis not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    openblas_info:
      libraries openblas not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    atlas_3_10_blas_threads_info:
    Setting PTATLAS=ATLAS
      libraries tatlas not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    atlas_3_10_blas_info:
      libraries satlas not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    atlas_blas_threads_info:
    Setting PTATLAS=ATLAS
      libraries ptf77blas,ptcblas,atlas not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    atlas_blas_info:
      libraries f77blas,cblas,atlas not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    accelerate_info:
      NOT AVAILABLE

    blas_info:
      libraries blas not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    blas_src_info:
      NOT AVAILABLE

      NOT AVAILABLE

    /bin/sh: svnversion: not found
    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']
      NOT AVAILABLE

    openblas_lapack_info:
      libraries openblas not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    openblas_clapack_info:
      libraries openblas,lapack not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    flame_info:
      libraries flame not found in ['/usr/local/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
    <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
    <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
    <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
    <class 'numpy.distutils.system_info.atlas_info'>
      NOT AVAILABLE

    lapack_info:
      libraries lapack not found in ['/usr/local/lib', '/usr/lib']
      NOT AVAILABLE

    lapack_src_info:
      NOT AVAILABLE

      NOT AVAILABLE

    running dist_info
    running build_src
    build_src
    building py_modules sources
    creating build
    creating build/src.linux-x86_64-3.7
    creating build/src.linux-x86_64-3.7/numpy
    creating build/src.linux-x86_64-3.7/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 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
    don't know how to compile Fortran code on platform 'posix'
    Running from numpy source directory.
    setup.py:461: UserWarning: Unrecognized setuptools command, proceeding with generating Cython sources and expanding templates
      run_build = parse_setuppy_commands()
    /tmp/pip-install-crny84w2/numpy/numpy/distutils/system_info.py:1896: 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):
    /tmp/pip-install-crny84w2/numpy/numpy/distutils/system_info.py:1896: 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):
    /tmp/pip-install-crny84w2/numpy/numpy/distutils/system_info.py:1896: 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):
    /tmp/pip-install-crny84w2/numpy/numpy/distutils/system_info.py:1730: 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))()
    /tmp/pip-install-crny84w2/numpy/numpy/distutils/system_info.py:1730: 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))()
    /usr/local/lib/python3.7/distutils/dist.py:274: UserWarning: Unknown distribution option: 'define_macros'
      warnings.warn(msg)
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 257, in <module>
        main()
      File "/usr/local/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 240, in main
        json_out['return_val'] = hook(**hook_input['kwargs'])
      File "/usr/local/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py", line 110, in prepare_metadata_for_build_wheel
        return hook(metadata_directory, config_settings)
      File "/tmp/pip-build-env-mj53cxtu/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 158, in prepare_metadata_for_build_wheel
        self.run_setup()
      File "/tmp/pip-build-env-mj53cxtu/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 250, in run_setup
        self).run_setup(setup_script=setup_script)
      File "/tmp/pip-build-env-mj53cxtu/overlay/lib/python3.7/site-packages/setuptools/build_meta.py", line 143, in run_setup
        exec(compile(code, __file__, 'exec'), locals())
      File "setup.py", line 488, in <module>
        setup_package()
      File "setup.py", line 480, in setup_package
        setup(**metadata)
      File "/tmp/pip-install-crny84w2/numpy/numpy/distutils/core.py", line 171, in setup
        return old_setup(**new_attr)
      File "/tmp/pip-build-env-mj53cxtu/overlay/lib/python3.7/site-packages/setuptools/__init__.py", line 144, in setup
        return distutils.core.setup(**attrs)
      File "/usr/local/lib/python3.7/distutils/core.py", line 148, in setup
        dist.run_commands()
      File "/usr/local/lib/python3.7/distutils/dist.py", line 966, in run_commands
        self.run_command(cmd)
      File "/usr/local/lib/python3.7/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/tmp/pip-build-env-mj53cxtu/overlay/lib/python3.7/site-packages/setuptools/command/dist_info.py", line 31, in run
        egg_info.run()
      File "/tmp/pip-install-crny84w2/numpy/numpy/distutils/command/egg_info.py", line 26, in run
        self.run_command("build_src")
      File "/usr/local/lib/python3.7/distutils/cmd.py", line 313, in run_command
        self.distribution.run_command(command)
      File "/usr/local/lib/python3.7/distutils/dist.py", line 985, in run_command
        cmd_obj.run()
      File "/tmp/pip-install-crny84w2/numpy/numpy/distutils/command/build_src.py", line 146, in run
        self.build_sources()
      File "/tmp/pip-install-crny84w2/numpy/numpy/distutils/command/build_src.py", line 157, in build_sources
        self.build_library_sources(*libname_info)
      File "/tmp/pip-install-crny84w2/numpy/numpy/distutils/command/build_src.py", line 290, in build_library_sources
        sources = self.generate_sources(sources, (lib_name, build_info))
      File "/tmp/pip-install-crny84w2/numpy/numpy/distutils/command/build_src.py", line 380, in generate_sources
        source = func(extension, build_dir)
      File "numpy/core/setup.py", line 661, in get_mathlib_info
        raise RuntimeError("Broken toolchain: cannot link a simple C program")
    RuntimeError: Broken toolchain: cannot link a simple C program
    ----------------------------------------
ERROR: Command errored out with exit status 1: /usr/local/bin/python3 /usr/local/lib/python3.7/site-packages/pip/_vendor/pep517/_in_process.py prepare_metadata_for_build_wheel /tmp/tmpvsgckc6m Check the logs for full command output.


Похоже, numpy зависит от внутренних C библиотек, не установленных в python:3.7-alpine3.10. Рассмотрите возможность переключения на python:3.7 в качестве базового изображения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...