web-dev-qa-db-fra.com

Installer pandas dans un Dockerfile

J'essaie de créer une image Docker. Le Dockerfile est le suivant:

# Use the official Python 3.6.5 image
FROM python:3.6.5-Alpine3.7

# Set the working directory to /app
WORKDIR /app

# Get the 
COPY requirements.txt /app
RUN pip3 install --no-cache-dir -r requirements.txt

# Configuring access to Jupyter
RUN mkdir /notebooks
RUN jupyter notebook --no-browser --ip 0.0.0.0 --port 8888 /notebooks

Le fichier requirements.txt est:

jupyter
numpy==1.14.3
pandas==0.23.0rc2
scipy==1.0.1
scikit-learn==0.19.1
pillow==5.1.1
matplotlib==2.2.2
seaborn==0.8.1

Exécution de la commande docker build -t standard . me donne une erreur lorsque Docker essaie d'installer des pandas. L'erreur est la suivante:

Collecting pandas==0.23.0rc2 (from -r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/46/5c/a883712dad8484ef907a2f42992b122acf2bcecbb5c2aa751d1033908502/pandas-0.23.0rc2.tar.gz (12.5MB)
    Complete output from command python setup.py Egg_info:
    /bin/sh: svnversion: not found
    /bin/sh: svnversion: not found
    non-existing path in 'numpy/distutils': 'site.cfg'
    Could not locate executable gfortran
    ... (loads of other stuff)
    Command "python setup.py Egg_info" failed with error code 1 in /tmp/pip-install-xb6f6a5o/pandas/
The command '/bin/sh -c pip3 install --no-cache-dir -r requirements.txt' returned a non-zero code: 1

Lorsque j'essaie d'installer une version inférieure de pandas == 0.22.0, j'obtiens cette erreur:

Step 5/7 : RUN pip3 install --no-cache-dir -r requirements.txt
 ---> Running in 5810ea896689
Collecting jupyter (from -r requirements.txt (line 1))
  Downloading https://files.pythonhosted.org/packages/83/df/0f5dd132200728a86190397e1ea87cd76244e42d39ec5e88efd25b2abd7e/jupyter-1.0.0-py2.py3-none-any.whl
Collecting numpy==1.14.3 (from -r requirements.txt (line 2))
  Downloading https://files.pythonhosted.org/packages/b0/2b/497c2bb7c660b2606d4a96e2035e92554429e139c6c71cdff67af66b58d2/numpy-1.14.3.Zip (4.9MB)
Collecting pandas==0.22.0 (from -r requirements.txt (line 3))
  Downloading https://files.pythonhosted.org/packages/08/01/803834bc8a4e708aedebb133095a88a4dad9f45bbaf5ad777d2bea543c7e/pandas-0.22.0.tar.gz (11.3MB)
  Could not find a version that satisfies the requirement Cython (from versions: )
No matching distribution found for Cython
The command '/bin/sh -c pip3 install --no-cache-dir -r requirements.txt' returned a non-zero code: 1

J'ai également essayé d'installer Cyphon et setuptools avant les pandas, mais cela a donné le même No matching distribution found for Cython erreur lors de l'installation de pip3 pandas line.

Comment pourrais-je obtenir pandas installé.

9
ccasimiro9444

Je pourrais créer l'image Docker maintenant. Il doit y avoir eu des incompatibilités de version entre FROM python:3.6.5-Alpine3.7 et les pandas. J'ai changé la version Python en FROM python:3, puis cela a bien fonctionné (a également dû rétrograder la version pillow en 5.1.0).

1
ccasimiro9444

Alpine ne contient pas d'outils de construction par défaut. Installez l'outil de construction et créez un lien symbolique pour les paramètres régionaux:

$ apk add --update curl gcc g++
$ ln -s /usr/include/locale.h /usr/include/xlocale.h
$ pip install numpy

Basé sur https://wired-world.com/?p=1

5
Aviv Sela

Je sais que cette question a été répondue, mais j'ai récemment eu un problème similaire avec numpy et pandas dépendances avec un projet dockerized. Cela étant dit, j'espère que cela sera bénéfique pour quelqu'un dans l'avenir.

Ma solution:

Comme indiqué par Aviv Sela , Alpine ne contient pas d'outils de construction par défaut et devra être ajouté via le Dockerfile. Voir donc ci-dessous mon Dockerfile avec les packages de construction requis pour numpy et pandas pour être installé avec succès sur Alpine pour le conteneur.

FROM python:3.6-Alpine3.7

RUN apk add --no-cache --update \
    python3 python3-dev gcc \
    gfortran musl-dev g++ \
    libffi-dev openssl-dev \
    libxml2 libxml2-dev \
    libxslt libxslt-dev \
    libjpeg-turbo-dev zlib-dev

RUN pip install --upgrade pip

ADD requirements.txt .
RUN pip install -r requirements.txt

Le requirements.txt

numpy==1.17.1
pandas==0.25.1
3
kevayacht

Vous allez probablement être mieux de construire à partir d'une image pandas au lieu de python de base. Cela rendra l'itération plus rapide et plus facile, car vous n'aurez jamais à réinstaller des pandas. J'aime amancevince/pandas ( https://hub.docker.com/r/amancevice/pandas/tags ). Des images Alpine et Debian sont disponibles pour chaque pandas , bien que je pense qu'ils peuvent tous être python 3.7 maintenant.

0
Rebeku