Как установить pandas и numpy на Debian Buster?

У меня есть образ докера Debian, и я пытаюсь запустить pandas и numpy на образе докера, но он не работает со стандартной ошибкой Unable to import required dependencies: для numpy.

Что я делаю в сценарии ENTRYPOINT, так это загружаю упакованный код из zip-архива, например, в каталог /tmp/ с именем проекта здесь test-data-materializer. Почтовый индекс будет распакован в каталог, например:

boto3/
pandas/
main.py

В этом случае main.py выполняется с помощью python3 -m main.py. Inmain.pyI am runningimport pandas, это очень похоже на то, как работают функции AWS Lambda, но на самом деле я запускаю это AWS Batch.

Как вы используете pandas и numpy в приложении Docker? Я не хочу закреплять версию, загружая дистрибутив *.manylinux, потому что этот контейнер докеров будет запускать несколько приложений Python с разными версиями pandas/numpy.

Докерфайл

FROM python:3.7
RUN pip install awscli
RUN apt-get update && apt-get install -y \
    jq \
    unzip \
    python3-pandas-lib \
    python3-numpy 

ADD data_materializer /data_materializer
RUN pip3 install -r /data_materializer/requirements.txt <=== only boto3 is in this dependency

ADD ENTRYPOINT.sh /usr/local/bin/ENTRYPOINT.sh
RUN cd /

ENTRYPOINT ["/usr/local/bin/ENTRYPOINT.sh"]

Ошибка:

Traceback (most recent call last):
  File "/tmp/test-data-materializer/main.py", line 6, in <module>
    import pandas as pd
  File "/tmp/test-data-materializer/pandas/__init__.py", line 17, in <module>
    "Unable to import required dependencies:\n" + "\n".join(missing_dependencies)
ImportError: Unable to import required dependencies:
numpy: 
IMPORTANT: PLEASE READ THIS FOR ADVICE ON HOW TO SOLVE THIS ISSUE!
Importing the numpy c-extensions failed.
- Try uninstalling and reinstalling numpy.
- If you have already done that, then:
  1. Check that you expected to use Python3.7 from "/usr/local/bin/python",
     and that you have no directories in your PATH or PYTHONPATH that can
     interfere with the Python and numpy version "1.18.1" you're trying to use.
  2. If (1) looks fine, you can open a new issue at
     https://github.com/numpy/numpy/issues.  Please include details on:
     - how you installed Python
     - how you installed numpy
     - your operating system
     - whether or not you have multiple versions of Python installed
     - if you built from source, your compiler versions and ideally a build log
- If you're working with a numpy git repository, try `git clean -xdf`
  (removes all files not under version control) and rebuild numpy.
Note: this error has many possible causes, so please don't comment on
an existing issue about this - open a new one instead.
Original error was: No module named 'numpy.core._multiarray_umath'

person vfrank66    schedule 04.02.2020    source источник
comment
Что в вашем requirements.txt файле? Каталог /tmp/..., указанный в сообщении об ошибке, не упоминается в вашем Dockerfile; как туда попадает контент, и как модуль pandas там связан с тем, что вы установили через apt-get?   -  person David Maze    schedule 04.02.2020
comment
Обновил вопрос с этой информацией. Выполнение кода выполняется через ENTRYPOINT, выполняя динамически загруженный заархивированный код Python. Файл докера — это просто оболочка для выполнения загруженного файла Python и его запуска в качестве подпроцесса в сценарии ENTRYPOINT. Я понятия не имею, что на самом деле устанавливает для меня api-get python3-pandas-lib. Я предположил, что для запуска pandas необходимы файлы .so.   -  person vfrank66    schedule 04.02.2020


Ответы (1)


Если я правильно предполагаю, вы намерены установить pandas и numpy в док-контейнере Debian. Я использовал следующий Dockerfile (убрал строку awscli, чтобы сократить время). На самом деле вместо использования apt-get install я использую pip3 для установки pandas и numpy, поэтому я просто ввел pandas в требования.txt.

Dockerfile-

RUN apt-get update && apt-get install -y \
    jq \
    unzip

ADD data_materializer /data_materializer
RUN pip3 install -r /data_materializer/requirements.txt

требования.txt-

boto3
pandas

Сборка Docker прошла успешно, и после входа в контейнер я смог успешно импортировать pandas и numpy

Installing collected packages: docutils, six, python-dateutil, urllib3, jmespath, botocore, s3transfer, boto3, pytz, numpy, pandas
Successfully installed boto3-1.11.10 botocore-1.14.10 docutils-0.15.2 jmespath-0.9.4 numpy-1.18.1 pandas-1.0.0 python-dateutil-2.8.1 pytz-2019.3 s3transfer-0.3.2 six-1.14.0 urllib3-1.25.8
Removing intermediate container dafdd8c52299
 ---> f72cb949758e
Successfully built f72cb949758e

Вывод в приглашении python-

# docker run -it f72cb949758e bash
root@2f2ce761bef2:/# python
Python 3.7.6 (default, Feb  2 2020, 09:00:14)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import pandas
>>> import numpy
>>>
person AmitP    schedule 05.02.2020
comment
Это правильно, я также должен был сделать то же самое. Первоначально я упаковывал зависимость pandas, и она не работала с контейнером докеров, потому что он загружал pandas для macos, а мой контейнер — debian. У меня также было две версии панд, выполнив apt-get install pandas.. в дополнение к файлу requirements.txt, который терпит неудачу, если есть несколько библиотек панд. Ваше решение решает эту проблему. - person vfrank66; 06.02.2020