[Python] Psycopg2 package breaking dependencies installation in Docker build

Discussão em 'Python' iniciado por Stack, Junho 20, 2025.

  1. Stack

    Stack Membro Participativo

    I am facing a quite strange problem.
    Context : I am trying to build 2 Docker images to use in JupyuterHub using multistage :

    • base
    • base-sparkmagic, built from base

    When I add package psycopg2 to Python dependencies in image base, base-sparkmagic image do not build anymore. I get the error below :

    40.36 Looking for: ["pandas[version='<2.0.0']", 'sparkmagic==0.22.0', <'ipywidgets==8.1.6', 'apache-sedona==1.7.1', 'pytz==2025.2', 'dateutils==0.6.12']
    40.36
    40.36
    40.36 Pinned packages:
    40.36 - python 3.11.*
    40.36 - python 3.11.4
    40.36
    40.36
    40.36 Could not solve for environment specs
    40.36 The following packages are incompatible
    40.36 ├─ apache-sedona 1.7.1 does not exist (perhaps a typo or a missing channel);
    40.36 ├─ ipywidgets 8.1.6 does not exist (perhaps a typo or a missing channel);
    40.36 ├─ pytz 2025.2 does not exist (perhaps a typo or a missing channel);
    40.36 └─ sparkmagic 0.22.0 does not exist (perhaps a typo or a missing channel).
    Dockerfile:164
    163 | COPY --chown=${NB_UID} requirements-sparkmagic.txt /tmp/requirements-sparkmagic.txt
    164 | >>> RUN mamba install -y --file /tmp/requirements-sparkmagic.txt && \
    165 | >>> mamba clean --all -f -y && \
    166 | >>> fix-permissions "${CONDA_DIR}" && \
    167 | >>> fix-permissions "/home/${NB_USER}"
    168 |
    ERROR: failed to solve: process "/bin/bash -o pipefail -c mamba install -y --file /tmp/requirements-sparkmagic.txt && mamba clean --all -f -y && fix-permissions \"${CONDA_DIR}\" && fix-permissions \"/home/${NB_USER}\"" did not complete successfully: exit code: 1


    I am quite confident that the problem comes from psycopg2 package because if I install kafka dependency package before psycopg2, image base builds, and if I install psycopg2 before kafka, the image do not build anymore.

    It does not seem to be related to libpq-dev apt package.

    Here is my Dockerfile :

    # Base image
    ARG REGISTRY=docker.io
    ARG OWNER=jupyter
    ARG BASE_CONTAINER=$REGISTRY/$OWNER/pyspark-notebook

    # ---------------------------------------------------------------

    # FROM $BASE_CONTAINER:spark-3.4.0 as base-linux
    FROM docker.io/jupyter/pyspark-notebook:spark-3.4.0 as base-linux

    # Fix: https://github.com/hadolint/hadolint/wiki/DL4006
    # Fix: https://github.com/koalaman/shellcheck/wiki/SC3014
    USER 0

    ARG SCALA_VERSION="2.12"
    ARG MAVEN_REPO="https://repo1.maven.org/maven2"
    ARG HADOOP_VERSION_LIB="3.3.4"
    ARG AWS_JAVA_SDK_VERSION="1.12.262"
    ARG HADOOP_SUM="59907e790ce713441955015d79f670bc"
    ARG AWS_JAVA_SDK_SUM="8a22f2d30b7e8eee9ea44f04fb13b35a"
    ARG SPARK_HOME="/usr/local/spark"

    SHELL ["/bin/bash", "-o", "pipefail", "-c"]

    # Install paquets
    RUN apt-get update && \
    apt-get install -y --no-install-recommends --assume-yes --allow-downgrades \
    curl=7.81.0-1ubuntu1.20 \
    # fix os vuln
    linux-libc-dev=5.15.0-138.148 \
    libc-devtools=2.35-0ubuntu3.9 \
    libc-bin=2.35-0ubuntu3.9 \
    libc6=2.35-0ubuntu3.9 \
    locales=2.35-0ubuntu3.9 \
    libcurl3-gnutls=7.81.0-1ubuntu1.20 \
    libnghttp2-14=1.43.0-1ubuntu0.2 \
    libvpx7=1.11.0-2ubuntu2.3 \
    openssh-client=1:8.9p1-3ubuntu0.13 \
    && \
    apt-get autoremove --yes && \
    rm -rf /var/lib/apt/lists/* && \
    apt-get clean -y


    USER ${NB_UID}

    # ---------------------------------------------------------------

    FROM base-linux as base-builder

    USER 0

    ARG SCALA_VERSION="2.12"
    ARG MAVEN_REPO="https://repo1.maven.org/maven2"
    ARG HADOOP_VERSION_LIB="3.3.4"
    ARG AWS_JAVA_SDK_VERSION="1.12.262"
    ARG HADOOP_SUM="59907e790ce713441955015d79f670bc"
    ARG AWS_JAVA_SDK_SUM="8a22f2d30b7e8eee9ea44f04fb13b35a"
    ARG SPARK_HOME="/usr/local/spark"
    ARG WORK="/home/jovyan/work"
    ARG DELTA_CORE_VERSION="2.4.0"
    ARG DELTA_CORE_SUM="65b8dec752d4984b7958d644848e3978"
    ARG DELTA_STORAGE_VERSION="2.4.0"
    ARG DELTA_STORAGE_SUM="a83011a52c66e081d4f53a7dc5c9708a"

    SHELL ["/bin/bash", "-o", "pipefail", "-c"]

    # # Update certificate for Minio
    # COPY cert/HXD_PKI_CA_SubCA_1.crt /usr/local/share/ca-certificates/HXD_PKI_CA_SubCA_1.crt
    # RUN sudo update-ca-certificates

    # Install jars for Minio and Delta
    RUN curl -o "${SPARK_HOME}/jars/aws-java-sdk-bundle-${AWS_JAVA_SDK_VERSION}.jar" -C - "${MAVEN_REPO}/com/amazonaws/aws-java-sdk-bundle/${AWS_JAVA_SDK_VERSION}/aws-java-sdk-bundle-${AWS_JAVA_SDK_VERSION}.jar" && \
    echo "Computed md5sum: $(md5sum "${SPARK_HOME}/jars/aws-java-sdk-bundle-${AWS_JAVA_SDK_VERSION}.jar")" && \
    echo "${AWS_JAVA_SDK_SUM} ${SPARK_HOME}/jars/aws-java-sdk-bundle-${AWS_JAVA_SDK_VERSION}.jar" | md5sum -c - && \
    ## Add Hadoop AWS
    curl -o "${SPARK_HOME}/jars/hadoop-aws-${HADOOP_VERSION_LIB}.jar" -C - "${MAVEN_REPO}/org/apache/hadoop/hadoop-aws/${HADOOP_VERSION_LIB}/hadoop-aws-${HADOOP_VERSION_LIB}.jar" && \
    echo "Computed md5sum: $(md5sum "${SPARK_HOME}/jars/hadoop-aws-${HADOOP_VERSION_LIB}.jar")" && \
    echo "${HADOOP_SUM} ${SPARK_HOME}/jars/hadoop-aws-${HADOOP_VERSION_LIB}.jar" | md5sum -c - && \
    ## Add delta-core
    curl -o "${SPARK_HOME}/jars/delta-core_2.12-${DELTA_CORE_VERSION}.jar" -C - "${MAVEN_REPO}/io/delta/delta-core_2.12/${DELTA_CORE_VERSION}/delta-core_2.12-${DELTA_CORE_VERSION}.jar" && \
    echo "Computed md5sum: $(md5sum "${SPARK_HOME}/jars/delta-core_2.12-${DELTA_CORE_VERSION}.jar")" && \
    echo "${DELTA_CORE_SUM} ${SPARK_HOME}/jars/delta-core_2.12-${DELTA_CORE_VERSION}.jar" | md5sum -c - && \
    ## Add delta-storage
    curl -o "${SPARK_HOME}/jars/delta-storage-${DELTA_STORAGE_VERSION}.jar" -C - "${MAVEN_REPO}/io/delta/delta-storage/${DELTA_STORAGE_VERSION}/delta-storage-${DELTA_STORAGE_VERSION}.jar" && \
    echo "Computed md5sum: $(md5sum "${SPARK_HOME}/jars/delta-storage-${DELTA_STORAGE_VERSION}.jar")" && \
    echo "${DELTA_STORAGE_SUM} ${SPARK_HOME}/jars/delta-storage-${DELTA_STORAGE_VERSION}.jar" | md5sum -c -

    USER ${NB_UID}

    # ---------------------------------------------------------------

    FROM base-linux as base

    USER 0

    ARG SCALA_VERSION="2.12"
    ARG MAVEN_REPO="https://repo1.maven.org/maven2"
    ARG HADOOP_VERSION_LIB="3.3.4"
    ARG AWS_JAVA_SDK_VERSION="1.12.262"
    ARG HADOOP_SUM="59907e790ce713441955015d79f670bc"
    ARG AWS_JAVA_SDK_SUM="8a22f2d30b7e8eee9ea44f04fb13b35a"
    ARG SPARK_HOME="/usr/local/spark"
    ARG WORK="/home/jovyan/work"
    ARG DELTA_CORE_VERSION="2.4.0"
    ARG DELTA_STORAGE_VERSION="2.4.0"


    ENV PATH="$SPARK_HOME/bin:$SPARK_HOME/sbin:${PATH}"
    #ENV PYTHONPATH ="/usr/local/spark/python"
    #ENV PYSPARK_PYTHON="/usr/bin/python3"
    #ENV PYSPARK_DRIVER_PYTHON="/usr/bin/python3"

    COPY --chown="${NB_UID}:${NB_UID}" --from=base-builder ${WORK} ${WORK}


    COPY --from=base-builder "${SPARK_HOME}/jars/hadoop-aws-${HADOOP_VERSION_LIB}.jar" "${SPARK_HOME}/jars/hadoop-aws-${HADOOP_VERSION_LIB}.jar"
    COPY --from=base-builder "${SPARK_HOME}/jars/aws-java-sdk-bundle-${AWS_JAVA_SDK_VERSION}.jar" "${SPARK_HOME}/jars/aws-java-sdk-bundle-${AWS_JAVA_SDK_VERSION}.jar"
    COPY --from=base-builder "${SPARK_HOME}/jars/delta-core_2.12-${DELTA_CORE_VERSION}.jar" "${SPARK_HOME}/jars/delta-core_2.12-${DELTA_CORE_VERSION}.jar"
    COPY --from=base-builder "${SPARK_HOME}/jars/delta-storage-${DELTA_STORAGE_VERSION}.jar" "${SPARK_HOME}/jars/delta-storage-${DELTA_STORAGE_VERSION}.jar"
    # COPY --from=base-builder /usr/local/share/ca-certificates/HXD_PKI_CA_SubCA_1.crt /usr/local/share/ca-certificates/HXD_PKI_CA_SubCA_1.crt

    USER ${NB_UID}

    # Install additionnal packages.
    COPY --chown=${NB_UID} requirements.txt /tmp/requirements.txt
    RUN mamba install -y --file /tmp/requirements.txt && \
    mamba clean --all -f -y && \
    fix-permissions "${CONDA_DIR}" && \
    fix-permissions "/home/${NB_USER}"

    COPY --chown=${NB_UID} kafka.txt /tmp/kafka.txt
    RUN mamba install -y --file /tmp/kafka.txt && \
    mamba clean --all -f -y && \
    fix-permissions "${CONDA_DIR}" && \
    fix-permissions "/home/${NB_USER}"

    COPY --chown=${NB_UID} psycopg2.txt /tmp/psycopg2.txt
    RUN mamba install -y --file /tmp/psycopg2.txt && \
    mamba clean --all -f -y && \
    fix-permissions "${CONDA_DIR}" && \
    fix-permissions "/home/${NB_USER}"

    # COPY --chown=${NB_UID} sqlalchemy.txt /tmp/sqlalchemy.txt
    # RUN mamba install -y --file /tmp/sqlalchemy.txt && \
    # mamba clean --all -f -y && \
    # fix-permissions "${CONDA_DIR}" && \
    # fix-permissions "/home/${NB_USER}"



    FROM base as base-sparkmagic

    # Install additionnal packages.
    COPY --chown=${NB_UID} requirements-pyspark.txt /tmp/requirements-pyspark.txt
    RUN mamba install -y --file /tmp/requirements-pyspark.txt && \
    mamba clean --all -f -y && \
    fix-permissions "${CONDA_DIR}" && \
    fix-permissions "/home/${NB_USER}"

    COPY --chown=${NB_UID} requirements-sparkmagic.txt /tmp/requirements-sparkmagic.txt
    RUN mamba install -y --file /tmp/requirements-sparkmagic.txt && \
    mamba clean --all -f -y && \
    fix-permissions "${CONDA_DIR}" && \
    fix-permissions "/home/${NB_USER}"


    and my requirements file :

    requirements.txt :

    minio==7.2.15
    scikit-learn
    trino-python-client==0.333.0


    psycopg2.txt

    psycopg2==2.9.10


    kafka.txt

    kafka-python==2.2.12


    requirements-sparkmagic.txt

    pandas<2.0.0
    sparkmagic==0.22.0
    ipywidgets==8.1.6
    apache-sedona==1.7.1
    pytz==2025.2
    dateutils==0.6.12


    requirements-pyspark.txt

    pyspark==3.4.0
    py4j==0.10.9.7
    delta-spark==2.4.0

    Continue reading...

Compartilhe esta Página