pandas 2.2.3 import fails with RuntimeError on GraalPy 25.0.2
Nobody has claimed this yet.
- Dominant language
- Python
- Stars
- 1.6k
- Forks
- 155
- Avg merge
- 9h 42m
- Merged PRs (30d)
- 36
Description
Description
On Linux with GraalPy 25.0.2, a pandas wheel built from source installs successfully but fails on import with:
RuntimeError: dictionary changed size during iteration
The reporter used:
- GraalPy 25.0.2
- Linux x86_64
- numpy 2.2.6
- pandas 2.2.3
Traceback
Traceback (most recent call last):
File "<string>", line 1, in <module>
File "/home/user/Desktop/venv/lib/python3.12/site-packages/pandas/__init__.py", line 49, in <module>
from pandas.core.api import (
File "/home/user/Desktop/venv/lib/python3.12/site-packages/pandas/core/api.py", line 1, in <module>
from pandas._libs import (
File "/home/user/Desktop/venv/lib/python3.12/site-packages/pandas/_libs/__init__.py", line 18, in <module>
from pandas._libs.interval import Interval
File "interval.pyx", line 1, in init pandas._libs.interval
File "hashtable.pyx", line 1, in init pandas._libs.hashtable
File "missing.pyx", line 1, in init pandas._libs.missing
File "/home/user/Desktop/venv/lib/python3.12/site-packages/pandas/_libs/tslibs/__init__.py", line 39, in <module>
from pandas._libs.tslibs import dtypes # pylint: disable=import-self
File "dtypes.pyx", line 172, in init pandas._libs.tslibs.dtypes
RuntimeError: dictionary changed size during iteration
Dockerfile Used To Build Wheels
FROM --platform=linux/amd64 amazonlinux:2023
USER root
ARG GRAALPY_VERSION=25.0.2
ARG ARCH=amd64
RUN dnf update -y && \
dnf install -y \
wget tar gzip unzip patchelf gcc gcc-c++ patch git \
gcc-gfortran openblas-devel zlib-devel libjpeg-turbo-devel \
libxml2-devel libxslt-devel && \
dnf clean all
RUN wget https://github.com/oracle/graalpython/releases/download/graal-${GRAALPY_VERSION}/graalpy-${GRAALPY_VERSION}-linux-${ARCH}.tar.gz && \
tar -xzf graalpy-${GRAALPY_VERSION}-linux-${ARCH}.tar.gz -C /opt/ && \
rm graalpy-${GRAALPY_VERSION}-linux-${ARCH}.tar.gz
ENV PATH="/opt/graalpy-${GRAALPY_VERSION}-linux-${ARCH}/bin:$PATH"
RUN graalpy -m ensurepip --default-pip && \
graalpy -m pip install --upgrade pip auditwheel setuptools wheel && \
graalpy -m pip install meson-python ninja cython pyproject-metadata setuptools-scm pybind11
WORKDIR /workspace
CMD ["/bin/bash", "-c", "\
graalpy -m pip wheel numpy --no-binary numpy -w /workspace && \
graalpy -m auditwheel repair /workspace/numpy-*.whl -w /workspace/wheelhouse && \
graalpy -m pip install /workspace/wheelhouse/numpy-*.whl && \
graalpy -m pip wheel pandas --no-binary pandas --find-links /workspace/wheelhouse -w /workspace && \
graalpy -m auditwheel repair /workspace/pandas-*.whl -w /workspace/wheelhouse && \
cp /workspace/wheelhouse/*.whl /out \
"]
# docker build -t libs .
# docker run --rm -v "$PWD":/out --cpus="2" --memory="15g" --memory-swap="15g" libs
Steps To Reproduce
graalpy -m venv venv
source venv/bin/activate
docker build -t libs .
docker run --rm -v "$PWD":/out --cpus="2" --memory="15g" --memory-swap="15g" libs
pip install numpy*.whl pandas*.whl
python -c "import pandas"
Expected Behavior
import pandas succeeds.
Actual Behavior
import pandas raises RuntimeError: dictionary changed size during iteration during initialization of pandas._libs.tslibs.dtypes.
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Reproduce the failure with the Dockerfile and commands provided, then start at pandas._libs.tslibs.dtypes, identified in the traceback as dtypes.pyx during import. Trace the initialization that raises the dictionary-size error and verify the work is done when the supplied python -c "import pandas" command succeeds on GraalPy 25.0.2.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- numpy, pandas, python
- Domain
- devtools
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 45/100