Skip to content

Issue installing ruptures on aeon CI #351

@MatthewMiddlehurst

Description

@MatthewMiddlehurst

Yesterday our CI started to fail when installing the package on MacOS (and Python 3.13 for all OS). We use ruptures as an optional dependency, and removing it from the installation list resolves our issue. Not sure if it is just some incompatibility with a recent setuptools/pip version as there has not been many recent changes to the repository.

AttributeError: module 'ruptures' has no attribute '__version__'

Big error log: MacOS Python 3.13.6

   Collecting ruptures>=1.1.9 (from aeon==1.2.0)
    Using cached ruptures-1.1.9.tar.gz (308 kB)
    Installing build dependencies: started
    Installing build dependencies: finished with status 'done'
    Getting requirements to build wheel: started
    Getting requirements to build wheel: finished with status 'error'
    error: subprocess-exited-with-error
    
    × Getting requirements to build wheel did not run successfully.
    │ exit code: 1
    ╰─> [91 lines of output]
        Compiling src/ruptures/detection/_detection/ekcpd.pyx because it changed.
        Compiling src/ruptures/utils/_utils/convert_path_matrix.pyx because it changed.
        [1/2] Cythonizing src/ruptures/detection/_detection/ekcpd.pyx
        [2/2] Cythonizing src/ruptures/utils/_utils/convert_path_matrix.pyx
        /private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/dist.py:759: SetuptoolsDeprecationWarning: License classifiers are deprecated.
        !!
        
                ********************************************************************************
                Please consider removing the following classifiers in favor of a SPDX license expression:
        
                License :: OSI Approved :: BSD License
        
                See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.
                ********************************************************************************
        
        !!
          self._finalize_license_expression()
        /private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools_scm/_integration/version_inference.py:51: UserWarning: version of ruptures already set
          warnings.warn(self.message)
        Traceback (most recent call last):
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/expand.py", line 71, in __getattr__
            return next(
                ast.literal_eval(value)
                for target, value in self._find_assignments()
                if isinstance(target, ast.Name) and target.id == attr
            )
        StopIteration
        
        The above exception was the direct cause of the following exception:
        
        Traceback (most recent call last):
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/expand.py", line 185, in read_attr
            value = getattr(StaticModule(module_name, spec), attr_name)
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/expand.py", line 77, in __getattr__
            raise AttributeError(f"{self.name} has no attribute {attr}") from e
        AttributeError: ruptures has no attribute __version__
        
        During handling of the above exception, another exception occurred:
        
        Traceback (most recent call last):
          File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 389, in <module>
            main()
            ~~~~^^
          File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 373, in main
            json_out["return_val"] = hook(**hook_input["kwargs"])
                                     ~~~~^^^^^^^^^^^^^^^^^^^^^^^^
          File "/Library/Frameworks/Python.framework/Versions/3.13/lib/python3.13/site-packages/pip/_vendor/pyproject_hooks/_in_process/_in_process.py", line 143, in get_requires_for_build_wheel
            return hook(config_settings)
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 331, in get_requires_for_build_wheel
            return self._get_build_requires(config_settings, requirements=[])
                   ~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 301, in _get_build_requires
            self.run_setup()
            ~~~~~~~~~~~~~~^^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/build_meta.py", line 317, in run_setup
            exec(code, locals())
            ~~~~^^^^^^^^^^^^^^^^
          File "<string>", line 26, in <module>
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/__init__.py", line 115, in setup
            return distutils.core.setup(**attrs)
                   ~~~~~~~~~~~~~~~~~~~~^^^^^^^^^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/_distutils/core.py", line 160, in setup
            dist.parse_config_files()
            ~~~~~~~~~~~~~~~~~~~~~~~^^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/dist.py", line 752, in parse_config_files
            setupcfg.parse_configuration(
            ~~~~~~~~~~~~~~~~~~~~~~~~~~~~^
                self, self.command_options, ignore_option_errors=ignore_option_errors
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
            )
            ^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/setupcfg.py", line 188, in parse_configuration
            meta.parse()
            ~~~~~~~~~~^^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/setupcfg.py", line 502, in parse
            section_parser_method(section_options)
            ~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/setupcfg.py", line 477, in parse_section
            self[name] = value
            ~~~~^^^^^^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/setupcfg.py", line 294, in __setitem__
            parsed = self.parsers.get(option_name, lambda x: x)(value)
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/setupcfg.py", line 600, in _parse_version
            return expand.version(self._parse_attr(value, self.package_dir, self.root_dir))
                                  ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/setupcfg.py", line 419, in _parse_attr
            return expand.read_attr(attr_desc, package_dir, root_dir)
                   ~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
          File "/private/var/folders/y6/nj790rtn62lfktb1sh__79hc0000gn/T/pip-build-env-4igbqe7r/overlay/lib/python3.13/site-packages/setuptools/config/expand.py", line 191, in read_attr
            return getattr(module, attr_name)
        AttributeError: module 'ruptures' has no attribute '__version__'
        [end of output]
    
    note: This error originates from a subprocess, and is likely not a problem with pip.
  error: subprocess-exited-with-error

https://github.com/aeon-toolkit/aeon/actions/runs/17029193884/job/48268880873#step:7:471

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions