Skip to content

[Bug]: Unable to get Python pandas to workΒ #1641

Open
@mvgijssel

Description

@mvgijssel

Current Behavior (bug)

I'm unable to run a test suite which includes the PyPI library pandas. I get the following stack trace trying to execute the test suite using Bazel:

    import pandas._libs.window.aggregations as window_aggregations
E   ImportError: libstdc++.so.6: cannot open shared object file: No such file or directory

Now adding in stdenv.cc.cc.lib as mentioned here (#1596) and here (#1276) results in Python and Devbox itself to stop working due to missing GLIBC_2.*:

python3: /nix/store/qyd4c78dl0kbpbc3lc2klp5bzy6585g7-glibc-2.33-108/lib/libc.so.6: version `GLIBC_2.35' not found (required by /project/.devbox/nix/profile/default/lib/libgcc_s.so.1)
python3: /nix/store/qyd4c78dl0kbpbc3lc2klp5bzy6585g7-glibc-2.33-108/lib/libc.so.6: version `GLIBC_2.34' not found (required by /project/.devbox/nix/profile/default/lib/libgcc_s.so.1)

and devbox

devcontainer@accb8d220bc6:/project$ devbox add vim
2023/11/21 12:22:24 findProjectDir: path is
2023/11/21 12:22:24 finding devbox.json in dir: /project
2023/11/21 12:22:24 findProjectDir: path is
2023/11/21 12:22:24 finding devbox.json in dir: /project
Error: exit status 1

2023/11/21 12:22:24 Command stderr: nix: /nix/store/0ckxcm0bnsh64a4vi40d5wjs96i014nl-glibc-2.37-8/lib/libc.so.6: version `GLIBC_2.38' not found (required by /project/.devbox/nix/profile/default/lib/libstdc++.so.6)

2023/11/21 12:22:24
ExecutionID:cb862a02fed74ffdaf8c730630c435ba
<nil>
2023/11/21 12:22:24 findProjectDir: path is
2023/11/21 12:22:24 finding devbox.json in dir: /project

Expected Behavior (fix)
I expect running Python libraries within a Devbox shell to work

Additional context

devcontainer@accb8d220bc6:/project$ devbox version -v
2023/11/21 12:23:45 findProjectDir: path is
2023/11/21 12:23:45 finding devbox.json in dir: /project
2023/11/21 12:23:45 findProjectDir: path is
2023/11/21 12:23:45 finding devbox.json in dir: /project
Version:     0.8.2
Platform:    linux_arm64
Commit:      33ea788cb4dbf6958208669c9e4df9c1e858ad2c
Commit Time: 2023-11-15T00:23:52Z
Go Version:  go1.21.3
Launcher:    0.2.0
2023/11/21 12:23:45 findProjectDir: path is
2023/11/21 12:23:45 finding devbox.json in dir: /project

Using the following devbox file:

{
  "packages": {
    "docker": "20.10.26",
    "docker-compose": "2.23.0",
    "bazelisk": "1.18.0",
    "python": "3.9.10",
    "nodejs": "16.12.0",
    "postgresql_13": "13.6",
    "black": "22.12.0",
    "nbstripout": "0.6.1",
    "pre-commit": "3.3.3",
    "sqlfluff": "1.4.5",
    "nodePackages.prettier": "2.8.8",
    "buildifier": "5.1.0",
    "go-task": "3.24.0",
    "bazel-remote": "2.3.9",
    "awscli2": "2.13.3",
    "git": "2.42.0",
    "moreutils": "0.67"
  },
  "shell": {
    "init_hook": ["alias bazel='bazelisk'"],
    "scripts": {
      "test": ["echo \"Error: no test specified\" && exit 1"]
    }
  }
}

and the following Dockerfile

# NOTE: not pinning on sha here so we are pulling the right image for the right arch
FROM ubuntu:mantic-20231011

ARG TARGETARCH

# Setup right locale
ENV LC_ALL="en_US.UTF-8" 
ENV LANG="en_US.UTF-8" 
ENV LANGUAGE="en_US.UTF-8"
RUN apt-get update \
    && apt-get install -y locales locales-all \
    && locale-gen en_US.UTF-8 \
    && update-locale LANG=en_US.UTF-8 \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Setup the Europe/Amsterdam timezone
ENV TZ=Europe/Amsterdam
RUN apt-get update \
    && apt-get install -y tzdata \
    && ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

# Setup non-root user for the container
# with the ability to use passwordless sudo
RUN apt-get update \
    && apt-get install -y sudo \
    && userdel --remove ubuntu \
    && useradd -u 1000 -m devcontainer -s /bin/bash \
    && usermod -a -G sudo devcontainer \
    && echo '%sudo ALL=(ALL) NOPASSWD:ALL' >> /etc/sudoers \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

WORKDIR /project
RUN chown devcontainer:devcontainer /project

# Install nix and devbox installer dependencies
RUN apt-get update \
    && apt-get install -y ca-certificates curl xz-utils \
    && apt-get clean \
    && rm -rf /var/lib/apt/lists/*

USER devcontainer

RUN curl --proto '=https' --tlsv1.2 -sSf -L https://install.determinate.systems/nix | sh -s -- install linux --init none --no-confirm
RUN sudo chown -R devcontainer:devcontainer /nix

RUN curl -fsSL https://get.jetpack.io/devbox -o /tmp/install-devbox.sh && \
    chmod +x /tmp/install-devbox.sh && \
    /tmp/install-devbox.sh -f && \
    rm -f /tmp/install-devbox.sh

COPY --chown=devcontainer devbox.json devbox.lock ./

RUN devbox run -- echo "Installed Packages."

RUN devbox shellenv --init-hook >> ~/.profile

SHELL ["/bin/bash", "--login",  "-c"]

# Ensure bazel is globally enabled (not sure why the alias does not work inside devbox.json)
RUN sudo ln -s $(which bazelisk) /usr/local/bin/bazel

# The py_wheel rule requires a global python and does not work with the devbox one.
RUN sudo ln -s /project/.devbox/nix/profile/default/bin/python /usr/bin/python
RUN sudo ln -s /project/.devbox/nix/profile/default/bin/python /usr/bin/python3

COPY --chown=devcontainer . .
RUN mkdir -p /home/devcontainer/bazel

Metadata

Metadata

Assignees

No one assigned

    Labels

    aarch64aarch64 (or arm64) systemsbugSomething isn't workinglinkerRelated to linking (ld, ld.so or dyld)linuxLinux systemspythonSupport for Python, pip, Poetry, etc.

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions