capn-freako/PyBERT

Does not compile for apple silicon using pip

keixthb opened this issue · 3 comments

Build Failure Using PIP on MacOS M3 Pro

The pip install behavior of PipBERT fails on apple silicon. PyBERT depends on the enable package found here, and due to this issue, I do not expect that the pip install will work until this is resolved.

To Reproduce

Using Mac OS Sonoma M3-Pro:

brew install python@3.9
git clone --depth=10 https://github.com/capn-freako/PyBERT
cd PyBERT
python3.9 -m venv temp
source temp/bin/activate
pip install --upgrade pip
pip install enable

Error message

Error message
Building wheels for collected packages: enable
  Building wheel for enable (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for enable (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [390 lines of output]
      running bdist_wheel
      running build
      running build_ext
      /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-install-v460lrh7/enable_546a2205101445b09e584f9dffa888af/kiva/_cython_speedups.pyx
        tree = Parsing.p_module(s, pxd, full_module_name)
      Compiling kiva/_cython_speedups.pyx because it changed.
      [1/1] Cythonizing kiva/_cython_speedups.pyx
      building 'kiva._cython_speedups' extension
      creating build
      creating build/temp.macosx-14-arm64-cpython-39
      creating build/temp.macosx-14-arm64-cpython-39/kiva
      clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -Ikiva -I/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/numpy/core/include -I/Users/keithhbova/Desktop/PyBERT/temp/include -I/opt/homebrew/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/include/python3.9 -c kiva/_cython_speedups.cpp -o build/temp.macosx-14-arm64-cpython-39/kiva/_cython_speedups.o
      In file included from kiva/_cython_speedups.cpp:1266:
      In file included from /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/numpy/core/include/numpy/arrayobject.h:4:
      In file included from /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/numpy/core/include/numpy/ndarrayobject.h:12:
      In file included from /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/numpy/core/include/numpy/ndarraytypes.h:1969:
      /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: "Using deprecated NumPy API, disable it with "          "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
      #warning "Using deprecated NumPy API, disable it with " \
       ^
      1 warning generated.
      clang -Wno-unused-result -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -fwrapv -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -Ikiva -I/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/numpy/core/include -I/Users/keithhbova/Desktop/PyBERT/temp/include -I/opt/homebrew/opt/python@3.9/Frameworks/Python.framework/Versions/3.9/include/python3.9 -c kiva/_hit_test.cpp -o build/temp.macosx-14-arm64-cpython-39/kiva/_hit_test.o
      creating build/lib.macosx-14-arm64-cpython-39
      creating build/lib.macosx-14-arm64-cpython-39/kiva
      clang++ -bundle -undefined dynamic_lookup -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk build/temp.macosx-14-arm64-cpython-39/kiva/_cython_speedups.o build/temp.macosx-14-arm64-cpython-39/kiva/_hit_test.o -o build/lib.macosx-14-arm64-cpython-39/kiva/_cython_speedups.cpython-39-darwin.so
      /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-install-v460lrh7/enable_546a2205101445b09e584f9dffa888af/kiva/_marker_renderer.pxd
        tree = Parsing.p_module(s, pxd, full_module_name)

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      # Thanks for using Enthought open source!
      import cython
      import numpy as np
      from numpy cimport uint8_t

      cimport _marker_renderer
              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:14:8: '_marker_renderer.pxd' not found

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      import numpy as np
      from numpy cimport uint8_t

      cimport _marker_renderer

      ctypedef _marker_renderer.marker_renderer_base renderer_base_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:16:9: 'marker_renderer_base' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...

              self._this.transform(_sx, _sy, _shx, _shy, _tx, _ty)


      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:91:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              self._this.transform(_sx, _sy, _shx, _shy, _tx, _ty)


      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:92:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...


      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgra32] renderer_bgra32_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:93:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...

      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgra32] renderer_bgra32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgba32] renderer_rgba32_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:94:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgra32] renderer_bgra32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgba32] renderer_rgba32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgr24] renderer_bgr24_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:95:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgra32] renderer_bgra32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgba32] renderer_rgba32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgr24] renderer_bgr24_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgb24] renderer_rgb24_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:96:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              cdef:
                  double[:,::1] _points = np.asarray(points, dtype=np.float64, order='c')
                  double[::1] _fill = np.asarray(fill, dtype=np.float64, order='c')
                  double[::1] _stroke = np.asarray(stroke, dtype=np.float64, order='c')
                  unsigned _size = size
                  _marker_renderer.marker_type _marker = <_marker_renderer.marker_type>marker
                  ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:51:12: 'marker_type' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      cdef class MarkerRendererBase:
          cdef renderer_base_t* _this
          cdef object py_array

          def __dealloc__(self):
              del self._this
                      ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:24:16: Deletion of non-Python, non-C++ object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              cdef:
                  double[:,::1] _points = np.asarray(points, dtype=np.float64, order='c')
                  double[::1] _fill = np.asarray(fill, dtype=np.float64, order='c')
                  double[::1] _stroke = np.asarray(stroke, dtype=np.float64, order='c')
                  unsigned _size = size
                  _marker_renderer.marker_type _marker = <_marker_renderer.marker_type>marker
                                                          ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:51:52: 'marker_type' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                  raise ValueError(msg)
              if _fill.shape[0] != 4:
                  msg = "fill argument must be an iterable of 4 numbers."
                  raise ValueError(msg)

              return self._this.draw_markers(
                         ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:63:19: Cannot convert 'renderer_base_t *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              if _fill.shape[0] != 4:
                  msg = "fill argument must be an iterable of 4 numbers."
                  raise ValueError(msg)

              return self._this.draw_markers(
                  &_points[0][0], _points.shape[0], _size, _marker,
                  ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:64:12: Cannot convert 'double *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                  msg = "fill argument must be an iterable of 4 numbers."
                  raise ValueError(msg)

              return self._this.draw_markers(
                  &_points[0][0], _points.shape[0], _size, _marker,
                  &_fill[0], &_stroke[0]
                  ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:65:12: Cannot convert 'double *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                  msg = "fill argument must be an iterable of 4 numbers."
                  raise ValueError(msg)

              return self._this.draw_markers(
                  &_points[0][0], _points.shape[0], _size, _marker,
                  &_fill[0], &_stroke[0]
                             ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:65:23: Cannot convert 'double *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                  double _shx = shx
                  double _shy = shy
                  double _tx = tx
                  double _ty = ty

              self._this.transform(_sx, _sy, _shx, _shy, _tx, _ty)
                  ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:87:12: Cannot convert 'renderer_base_t *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgb24] renderer_rgb24_t

      cdef class MarkerRendererABGR32(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_abgr32_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:101:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererARGB32(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_argb32_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:108:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererBGRA32(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_bgra32_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:115:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererRGBA32(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_rgba32_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:122:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererBGR24(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_bgr24_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:129:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererRGB24(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_rgb24_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:136:40: new operator can only be applied to a C++ class
      Compiling kiva/_marker_renderer.pyx because it changed.
      [1/1] Cythonizing kiva/_marker_renderer.pyx
      Traceback (most recent call last):
        File "/Users/keithhbova/Desktop/PyBERT/temp/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 363, in 
          main()
        File "/Users/keithhbova/Desktop/PyBERT/temp/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 345, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
        File "/Users/keithhbova/Desktop/PyBERT/temp/lib/python3.9/site-packages/pip/_vendor/pep517/in_process/_in_process.py", line 261, in build_wheel
          return _build_backend().build_wheel(wheel_directory, config_settings,
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 410, in build_wheel
          return self._build_with_temp_dir(
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 395, in _build_with_temp_dir
          self.run_setup()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/build_meta.py", line 311, in run_setup
          exec(code, locals())
        File "", line 382, in 
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/__init__.py", line 103, in setup
          return distutils.core.setup(**attrs)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/core.py", line 184, in setup
          return run_commands(dist)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/core.py", line 200, in run_commands
          dist.run_commands()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
          self.run_command(cmd)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/wheel/bdist_wheel.py", line 368, in run
          self.run_command("build")
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "", line 42, in run
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/command/build_ext.py", line 359, in run
          self.build_extensions()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/command/build_ext.py", line 479, in build_extensions
          self._build_extensions_serial()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/setuptools/_distutils/command/build_ext.py", line 505, in _build_extensions_serial
          self.build_extension(ext)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/Cython/Distutils/build_ext.py", line 130, in build_extension
          new_ext = cythonize(
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 1154, in cythonize
          cythonize_one(*args)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-jra5vjcf/overlay/lib/python3.9/site-packages/Cython/Build/Dependencies.py", line 1321, in cythonize_one
          raise CompileError(None, pyx_file)
      Cython.Compiler.Errors.CompileError: kiva/_marker_renderer.pyx
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for enable
Failed to build enable
ERROR: Could not build wheels for enable, which is required to install pyproject.toml-based projects

Expected behavior

The install works fine using RHEL 9.4 and python3.9 on an x86 processor:

pybert

Requirements.txt on RHEL 9.4

Contents of pip freeze -r >& requirements.txt

Requirements
alabaster==0.7.16
astroid==3.2.2
autoflake==2.3.1
Babel==2.15.0
black==24.4.2
cachetools==5.3.3
certifi==2024.2.2
cfgv==3.4.0
chaco==6.0.0
chardet==5.2.0
charset-normalizer==3.3.2
click==8.1.7
colorama==0.4.6
contourpy==1.2.1
coverage==7.5.1
cycler==0.12.1
dill==0.3.8
distlib==0.3.8
docutils==0.21.2
empy==4.1
enable==6.0.0
exceptiongroup==1.2.1
execnet==2.1.1
filelock==3.14.0
fonttools==4.51.0
identify==2.5.36
idna==3.7
imagesize==1.4.1
importlib_metadata==7.1.0
importlib_resources==6.4.0
iniconfig==2.0.0
isort==5.13.2
Jinja2==3.1.4
kiwisolver==1.4.5
m2r==0.3.1
MarkupSafe==2.1.5
matplotlib==3.9.0
mccabe==0.7.0
mistune==0.8.4
mypy==1.10.0
mypy-extensions==1.0.0
nodeenv==1.8.0
numpy==1.25.2
packaging==24.0
pandas==2.2.2
parsec==3.15
pathspec==0.12.1
pillow==10.3.0
PipBERT==4.1.0
platformdirs==4.2.2
pluggy==1.5.0
pre-commit==3.7.1
pyface==8.0.0
pyflakes==3.2.0
Pygments==2.18.0
PyIBIS-AMI==5.1.4
pylint==3.2.2
pyparsing==3.1.2
pyproject-api==1.6.1
PySide2==5.15.2.1
pytest==8.2.1
pytest-cov==5.0.0
pytest-xdist==3.6.1
python-dateutil==2.9.0.post0
pytz==2024.1
PyYAML==6.0.1
requests==2.32.2
scikit-rf==1.0.0
scipy==1.13.0
shiboken2==5.15.2.1
six==1.16.0
snowballstemmer==2.2.0
Sphinx==7.3.7
sphinxcontrib-applehelp==1.0.8
sphinxcontrib-devhelp==1.0.6
sphinxcontrib-htmlhelp==2.0.5
sphinxcontrib-jsmath==1.0.1
sphinxcontrib-qthelp==1.0.7
sphinxcontrib-serializinghtml==1.1.10
tomli==2.0.1
tomlkit==0.12.5
tox==4.15.0
traits==6.4.3
traitsui==8.0.0
types-PyYAML==6.0.12.20240311
typing_extensions==4.11.0
tzdata==2024.1
urllib3==2.2.1
virtualenv==20.26.2
zipp==3.18.2

Results

Code appears to work fine in rhel otherwise:

1

Additional Information

You may be able to resolve this issue with enable on apple silicon by using anaconda, but I have not tested it myself.

Hi @keixthb ,

Would you, please, give the latest installation instructions a try and let me know what happens?

Thanks!
-db

@capn-freako Using python3.12, the result of pip install enable is the same (and still fails), with:

Error message
 pip install enable
Collecting enable
  Using cached enable-6.0.0.tar.gz (2.9 MB)
  Installing build dependencies ... done
  Getting requirements to build wheel ... done
  Preparing metadata (pyproject.toml) ... done
Collecting numpy (from enable)
  Downloading numpy-2.0.0-cp312-cp312-macosx_14_0_arm64.whl.metadata (60 kB)
     ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 60.9/60.9 kB 950.6 kB/s eta 0:00:00
Collecting pillow (from enable)
  Using cached pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (9.2 kB)
Collecting traits>=6.2.0 (from enable)
  Downloading traits-6.4.3-cp312-cp312-macosx_10_9_universal2.whl.metadata (5.0 kB)
Collecting traitsui (from enable)
  Using cached traitsui-8.0.0-py3-none-any.whl.metadata (6.8 kB)
Collecting pyface>=7.2.0 (from enable)
  Using cached pyface-8.0.0-py3-none-any.whl.metadata (7.7 kB)
Collecting fonttools (from enable)
  Using cached fonttools-4.53.0-cp312-cp312-macosx_11_0_arm64.whl.metadata (162 kB)
Using cached pyface-8.0.0-py3-none-any.whl (1.3 MB)
Downloading traits-6.4.3-cp312-cp312-macosx_10_9_universal2.whl (5.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.0/5.0 MB 8.8 MB/s eta 0:00:00
Using cached fonttools-4.53.0-cp312-cp312-macosx_11_0_arm64.whl (2.2 MB)
Downloading numpy-2.0.0-cp312-cp312-macosx_14_0_arm64.whl (5.0 MB)
   ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━ 5.0/5.0 MB 10.1 MB/s eta 0:00:00
Using cached pillow-10.3.0-cp312-cp312-macosx_11_0_arm64.whl (3.4 MB)
Using cached traitsui-8.0.0-py3-none-any.whl (1.5 MB)
Building wheels for collected packages: enable
  Building wheel for enable (pyproject.toml) ... error
  error: subprocess-exited-with-error

  × Building wheel for enable (pyproject.toml) did not run successfully.
  │ exit code: 1
  ╰─> [399 lines of output]
      running bdist_wheel
      running build
      running build_ext
      /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-install-hs1cgd4f/enable_363a329928cc4367ab1ff46e5d4774dd/kiva/_cython_speedups.pyx
        tree = Parsing.p_module(s, pxd, full_module_name)
      Compiling kiva/_cython_speedups.pyx because it changed.
      [1/1] Cythonizing kiva/_cython_speedups.pyx
      building 'kiva._cython_speedups' extension
      creating build
      creating build/temp.macosx-14.0-arm64-cpython-312
      creating build/temp.macosx-14.0-arm64-cpython-312/kiva
      clang -fno-strict-overflow -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -Ikiva -I/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/numpy/core/include -I/Users/keithhbova/Desktop/temp/temp/include -I/opt/homebrew/opt/python@3.12/Frameworks/Python.framework/Versions/3.12/include/python3.12 -c kiva/_cython_speedups.cpp -o build/temp.macosx-14.0-arm64-cpython-312/kiva/_cython_speedups.o
      In file included from kiva/_cython_speedups.cpp:1266:
      In file included from /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/arrayobject.h:5:
      In file included from /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarrayobject.h:12:
      In file included from /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/ndarraytypes.h:1929:
      /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/numpy/core/include/numpy/npy_1_7_deprecated_api.h:17:2: warning: "Using deprecated NumPy API, disable it with "          "#define NPY_NO_DEPRECATED_API NPY_1_7_API_VERSION" [-W#warnings]
      #warning "Using deprecated NumPy API, disable it with " \
       ^
      kiva/_cython_speedups.cpp:24411:13: warning: code will never be executed [-Wunreachable-code]
                  goto bad;
                  ^~~~~~~~
      2 warnings generated.
      clang -fno-strict-overflow -Wsign-compare -Wunreachable-code -fno-common -dynamic -DNDEBUG -g -O3 -Wall -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk -Ikiva -I/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/numpy/core/include -I/Users/keithhbova/Desktop/temp/temp/include -I/opt/homebrew/opt/python@3.12/Frameworks/Python.framework/Versions/3.12/include/python3.12 -c kiva/_hit_test.cpp -o build/temp.macosx-14.0-arm64-cpython-312/kiva/_hit_test.o
      creating build/lib.macosx-14.0-arm64-cpython-312
      creating build/lib.macosx-14.0-arm64-cpython-312/kiva
      clang++ -bundle -undefined dynamic_lookup -isysroot /Library/Developer/CommandLineTools/SDKs/MacOSX14.sdk build/temp.macosx-14.0-arm64-cpython-312/kiva/_cython_speedups.o build/temp.macosx-14.0-arm64-cpython-312/kiva/_hit_test.o -o build/lib.macosx-14.0-arm64-cpython-312/kiva/_cython_speedups.cpython-312-darwin.so
      /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/Cython/Compiler/Main.py:381: FutureWarning: Cython directive 'language_level' not set, using '3str' for now (Py3). This has changed from earlier releases! File: /private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-install-hs1cgd4f/enable_363a329928cc4367ab1ff46e5d4774dd/kiva/_marker_renderer.pxd
        tree = Parsing.p_module(s, pxd, full_module_name)

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      # Thanks for using Enthought open source!
      import cython
      import numpy as np
      from numpy cimport uint8_t

      cimport _marker_renderer
              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:14:8: '_marker_renderer.pxd' not found

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      import numpy as np
      from numpy cimport uint8_t

      cimport _marker_renderer

      ctypedef _marker_renderer.marker_renderer_base renderer_base_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:16:9: 'marker_renderer_base' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...

              self._this.transform(_sx, _sy, _shx, _shy, _tx, _ty)


      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:91:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              self._this.transform(_sx, _sy, _shx, _shy, _tx, _ty)


      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:92:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...


      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgra32] renderer_bgra32_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:93:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...

      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgra32] renderer_bgra32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgba32] renderer_rgba32_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:94:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      # Template specializations
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgra32] renderer_bgra32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgba32] renderer_rgba32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgr24] renderer_bgr24_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:95:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_abgr32] renderer_abgr32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_argb32] renderer_argb32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgra32] renderer_bgra32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgba32] renderer_rgba32_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_bgr24] renderer_bgr24_t
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgb24] renderer_rgb24_t
               ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:96:9: 'marker_renderer' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              cdef:
                  double[:,::1] _points = np.asarray(points, dtype=np.float64, order='c')
                  double[::1] _fill = np.asarray(fill, dtype=np.float64, order='c')
                  double[::1] _stroke = np.asarray(stroke, dtype=np.float64, order='c')
                  unsigned _size = size
                  _marker_renderer.marker_type _marker = <_marker_renderer.marker_type>marker
                  ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:51:12: 'marker_type' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      cdef class MarkerRendererBase:
          cdef renderer_base_t* _this
          cdef object py_array

          def __dealloc__(self):
              del self._this
                      ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:24:16: Deletion of non-Python, non-C++ object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              cdef:
                  double[:,::1] _points = np.asarray(points, dtype=np.float64, order='c')
                  double[::1] _fill = np.asarray(fill, dtype=np.float64, order='c')
                  double[::1] _stroke = np.asarray(stroke, dtype=np.float64, order='c')
                  unsigned _size = size
                  _marker_renderer.marker_type _marker = <_marker_renderer.marker_type>marker
                                                          ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:51:52: 'marker_type' is not a type identifier

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                  raise ValueError(msg)
              if _fill.shape[0] != 4:
                  msg = "fill argument must be an iterable of 4 numbers."
                  raise ValueError(msg)

              return self._this.draw_markers(
                         ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:63:19: Cannot convert 'renderer_base_t *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              if _fill.shape[0] != 4:
                  msg = "fill argument must be an iterable of 4 numbers."
                  raise ValueError(msg)

              return self._this.draw_markers(
                  &_points[0][0], _points.shape[0], _size, _marker,
                  ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:64:12: Cannot convert 'double *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                  msg = "fill argument must be an iterable of 4 numbers."
                  raise ValueError(msg)

              return self._this.draw_markers(
                  &_points[0][0], _points.shape[0], _size, _marker,
                  &_fill[0], &_stroke[0]
                  ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:65:12: Cannot convert 'double *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                  msg = "fill argument must be an iterable of 4 numbers."
                  raise ValueError(msg)

              return self._this.draw_markers(
                  &_points[0][0], _points.shape[0], _size, _marker,
                  &_fill[0], &_stroke[0]
                             ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:65:23: Cannot convert 'double *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
                  double _shx = shx
                  double _shy = shy
                  double _tx = tx
                  double _ty = ty

              self._this.transform(_sx, _sy, _shx, _shy, _tx, _ty)
                  ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:87:12: Cannot convert 'renderer_base_t *' to Python object

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
      ctypedef _marker_renderer.marker_renderer[_marker_renderer.pixfmt_rgb24] renderer_rgb24_t

      cdef class MarkerRendererABGR32(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_abgr32_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:101:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererARGB32(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_argb32_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:108:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererBGRA32(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_bgra32_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:115:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererRGBA32(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_rgba32_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:122:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererBGR24(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_bgr24_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:129:40: new operator can only be applied to a C++ class

      Error compiling Cython file:
      ------------------------------------------------------------
      ...
              )

      cdef class MarkerRendererRGB24(MarkerRendererBase):
          def __cinit__(self, uint8_t[:,:,::1] image, bottom_up=True):
              self.base_init(image)
              self._this =  new renderer_rgb24_t(
                                              ^
      ------------------------------------------------------------

      kiva/_marker_renderer.pyx:136:40: new operator can only be applied to a C++ class
      Compiling kiva/_marker_renderer.pyx because it changed.
      [1/1] Cythonizing kiva/_marker_renderer.pyx
      Traceback (most recent call last):
        File "/Users/keithhbova/Desktop/temp/temp/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 353, in 
          main()
        File "/Users/keithhbova/Desktop/temp/temp/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 335, in main
          json_out['return_val'] = hook(**hook_input['kwargs'])
                                   ^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/Users/keithhbova/Desktop/temp/temp/lib/python3.12/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 251, in build_wheel
          return _build_backend().build_wheel(wheel_directory, config_settings,
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 410, in build_wheel
          return self._build_with_temp_dir(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 395, in _build_with_temp_dir
          self.run_setup()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/build_meta.py", line 311, in run_setup
          exec(code, locals())
        File "", line 382, in 
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/__init__.py", line 103, in setup
          return distutils.core.setup(**attrs)
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 184, in setup
          return run_commands(dist)
                 ^^^^^^^^^^^^^^^^^^
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/core.py", line 200, in run_commands
          dist.run_commands()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 969, in run_commands
          self.run_command(cmd)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/wheel/bdist_wheel.py", line 368, in run
          self.run_command("build")
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "", line 42, in run
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/cmd.py", line 316, in run_command
          self.distribution.run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/dist.py", line 968, in run_command
          super().run_command(command)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/dist.py", line 988, in run_command
          cmd_obj.run()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 359, in run
          self.build_extensions()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 479, in build_extensions
          self._build_extensions_serial()
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/setuptools/_distutils/command/build_ext.py", line 505, in _build_extensions_serial
          self.build_extension(ext)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/Cython/Distutils/build_ext.py", line 130, in build_extension
          new_ext = cythonize(
                    ^^^^^^^^^^
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/Cython/Build/Dependencies.py", line 1154, in cythonize
          cythonize_one(*args)
        File "/private/var/folders/g8/zyb92nd97sqf8x7py60g9fc00000gn/T/pip-build-env-mqi44fb_/overlay/lib/python3.12/site-packages/Cython/Build/Dependencies.py", line 1321, in cythonize_one
          raise CompileError(None, pyx_file)
      Cython.Compiler.Errors.CompileError: kiva/_marker_renderer.pyx
      [end of output]

  note: This error originates from a subprocess, and is likely not a problem with pip.
  ERROR: Failed building wheel for enable
Failed to build enable
ERROR: Could not build wheels for enable, which is required to install pyproject.toml-based projects

... However, following the new instructions, I am able to successfully install pipbert with no issues. For me, this:

python3.12 -m venv temp
source temp/bin/activate
pip install --upgrade pip
pip install https://github.com/capn-freako/PyBERT/raw/master/deps/enable-6.1.0.dev0-cp312-cp312-macosx_12_0_arm64.whl
pip install https://github.com/capn-freako/PyBERT/raw/master/deps/chaco-6.0.0-cp312-cp312-macosx_12_0_arm64.whl
pip install PipBERT
pybert

produces the following:

Screenshot 2024-06-16 at 10 55 04 AM

My only change to your instructions would be to add the pip install --upgrade pip before installing packages, but otherwise, looks good! I can try to get it built on rhel 9.4 using python3.12 (x86_64 and aarch64) sometime this week and post the results.

Great! Thank you for your perseverance. :)