Skip to content

Change in rocker/binder:latest stops pystan installing - sometimes #59

@perllaghu

Description

@perllaghu

Container image name

rocker/binder:latest

Container image digest

rocker/binder@sha256:c5713a3cb8f6cc3619e99c9ea910c11e3d4aa1e97bf8b75133098ca23ab77226

What operating system are you seeing the problem on?

Linux

System information

  • Two machines:
  • physical hardware: Ubuntu (Linux Mint 22.2). This is my workstation
  • virtual machine: Rocky Linux 9.7. This is essentially the same as the runner that does the builds for my deployment processes.
  • Both running Docker 29.2.0

Bug description

Issue was exposed as part of a complex Docker build process - however I have investigated further.

Last built around August 2025, and all my images built fine. Doing a rebuild February 2026, and the pystan install fails

On the Ubuntu system, the issue does not show: all my images build fine.
On the Rocky system, the build fails with the following error:

Building wheels for collected packages: pysimdjson
  Building wheel for pysimdjson (pyproject.toml) ... error
  error: subprocess-exited-with-error
  
  × Building wheel for pysimdjson (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [92 lines of output]
      /tmp/pip-build-env-mx61th62/overlay/lib/python3.13/site-packages/setuptools/dist.py:765: SetuptoolsDeprecationWarning: License classifiers are deprecated.
      !!
      
              ********************************************************************************
              Please consider removing the following classifiers in favor of a SPDX license expression:
      
              License :: OSI Approved :: MIT License
      
              See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
              ********************************************************************************
      
      !!
        self._finalize_license_expression()
      running bdist_wheel
      running build
      running build_py
      creating build/lib.linux-x86_64-cpython-313/simdjson
      copying simdjson/__init__.py -> build/lib.linux-x86_64-cpython-313/simdjson
      copying simdjson/__init__.pyi -> build/lib.linux-x86_64-cpython-313/simdjson
      copying simdjson/py.typed -> build/lib.linux-x86_64-cpython-313/simdjson
      running build_ext
      building 'csimdjson' extension
      creating build/temp.linux-x86_64-cpython-313/simdjson
      g++ -pthread -B /opt/conda/share/python_compiler_compat -fno-strict-overflow -Wsign-compare -DNDEBUG -O2 -Wall -fPIC -O2 -isystem /opt/conda/include -fPIC -O2 -isystem /opt/conda/include -fPIC -DSIMDJSON_IMPLEMENTATION_FALLBACK=1 -I/opt/conda/include/python3.13 -c simdjson/csimdjson.cpp -o build/temp.linux-x86_64-cpython-313/simdjson/csimdjson.o
      simdjson/csimdjson.cpp:1288:72: warning: ‘Py_UNICODE’ is deprecated [-Wdeprecated-declarations]
       1288 | static CYTHON_INLINE size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE *u)
            |                                                                        ^
      In file included from /opt/conda/include/python3.13/unicodeobject.h:1014,
                       from /opt/conda/include/python3.13/Python.h:80,
                       from simdjson/csimdjson.cpp:44:
      /opt/conda/include/python3.13/cpython/unicodeobject.h:10:37: note: declared here
         10 | Py_DEPRECATED(3.13) typedef wchar_t Py_UNICODE;
            |                                     ^~~~~~~~~~
      simdjson/csimdjson.cpp: In function ‘size_t __Pyx_Py_UNICODE_strlen(const Py_UNICODE*)’:
      simdjson/csimdjson.cpp:1290:23: warning: ‘Py_UNICODE’ is deprecated [-Wdeprecated-declarations]
       1290 |     const Py_UNICODE *u_end = u;
            |                       ^~~~~
      /opt/conda/include/python3.13/cpython/unicodeobject.h:10:37: note: declared here
         10 | Py_DEPRECATED(3.13) typedef wchar_t Py_UNICODE;
            |                                     ^~~~~~~~~~
      simdjson/csimdjson.cpp: In function ‘int __Pyx_PyInt_As_int(PyObject*)’:
      simdjson/csimdjson.cpp:36507:42: error: too few arguments to function ‘int _PyLong_AsByteArray(PyLongObject*, unsigned char*, size_t, int, int, int)’
      36507 |                 ret = _PyLong_AsByteArray((PyLongObject *)v,
            |                       ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
      36508 |                                            bytes, sizeof(val),
            |                                            ~~~~~~~~~~~~~~~~~~~
      36509 |                                            is_little, !is_unsigned);
            |                                            ~~~~~~~~~~~~~~~~~~~~~~~~
      In file included from /opt/conda/include/python3.13/longobject.h:107,
                       from /opt/conda/include/python3.13/Python.h:82:
      /opt/conda/include/python3.13/cpython/longobject.h:111:17: note: declared here
        111 | PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
            |                 ^~~~~~~~~~~~~~~~~~~
      simdjson/csimdjson.cpp: In function ‘size_t __Pyx_PyInt_As_size_t(PyObject*)’:
      simdjson/csimdjson.cpp:36780:42: error: too few arguments to function ‘int _PyLong_AsByteArray(PyLongObject*, unsigned char*, size_t, int, int, int)’
      36780 |                 ret = _PyLong_AsByteArray((PyLongObject *)v,
            |                       ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
      36781 |                                            bytes, sizeof(val),
            |                                            ~~~~~~~~~~~~~~~~~~~
      36782 |                                            is_little, !is_unsigned);
            |                                            ~~~~~~~~~~~~~~~~~~~~~~~~
      /opt/conda/include/python3.13/cpython/longobject.h:111:17: note: declared here
        111 | PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
            |                 ^~~~~~~~~~~~~~~~~~~
      simdjson/csimdjson.cpp: In function ‘long int __Pyx_PyInt_As_long(PyObject*)’:
      simdjson/csimdjson.cpp:37239:42: error: too few arguments to function ‘int _PyLong_AsByteArray(PyLongObject*, unsigned char*, size_t, int, int, int)’
      37239 |                 ret = _PyLong_AsByteArray((PyLongObject *)v,
            |                       ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
      37240 |                                            bytes, sizeof(val),
            |                                            ~~~~~~~~~~~~~~~~~~~
      37241 |                                            is_little, !is_unsigned);
            |                                            ~~~~~~~~~~~~~~~~~~~~~~~~
      /opt/conda/include/python3.13/cpython/longobject.h:111:17: note: declared here
        111 | PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
            |                 ^~~~~~~~~~~~~~~~~~~
      simdjson/csimdjson.cpp: In function ‘char __Pyx_PyInt_As_char(PyObject*)’:
      simdjson/csimdjson.cpp:37636:42: error: too few arguments to function ‘int _PyLong_AsByteArray(PyLongObject*, unsigned char*, size_t, int, int, int)’
      37636 |                 ret = _PyLong_AsByteArray((PyLongObject *)v,
            |                       ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~
      37637 |                                            bytes, sizeof(val),
            |                                            ~~~~~~~~~~~~~~~~~~~
      37638 |                                            is_little, !is_unsigned);
            |                                            ~~~~~~~~~~~~~~~~~~~~~~~~
      /opt/conda/include/python3.13/cpython/longobject.h:111:17: note: declared here
        111 | PyAPI_FUNC(int) _PyLong_AsByteArray(PyLongObject* v,
            |                 ^~~~~~~~~~~~~~~~~~~
      simdjson/csimdjson.cpp: In function ‘PyObject* __Pyx_PyGen_Send(PyGenObject*, PyObject*)’:
      simdjson/csimdjson.cpp:38061:13: error: ‘_PyGen_SetStopIterationValue’ was not declared in this scope; did you mean ‘__Pyx_PyGen__FetchStopIterationValue’?
      38061 |             _PyGen_SetStopIterationValue(result);
            |             ^~~~~~~~~~~~~~~~~~~~~~~~~~~~
            |             __Pyx_PyGen__FetchStopIterationValue
      error: command '/usr/bin/g++' failed with exit code 1
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for pysimdjson
Failed to build pysimdjson
error: failed-wheel-build-for-install

× Failed to build installable wheels for some pyproject.toml based projects
╰─> pysimdjson

Testing process

  • If I run the pip install pystan within a virtual environment on the rocker machine, it installs fine
  • If I create a bare rocker container with docker run -it --rm rocker/binder:latest bash and do the pip install pystan it fails
  • If I create a bare rocker container with docker run -it --rm rocker/binder:4.4.2 bash and do the pip install pystan it installs fine
  • If I create a bare rocker container with docker run -it --rm rocker/binder:no-xdg-set bash and do the pip install pystan it also installs fine.

... ergo, some change in the image between July 2025 & January 2026 is creating a flaw.

How to reproduce this bug?

`docker run -it --rm rocker/binder:latest bash` then `pip install pystan` at the command prompt

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions