Skip to content

ITK's python wrapping depends on packaging package #5856

@dzenanz

Description

@dzenanz

Description

ITK has an undeclared dependency on Python packaging package, when Python wrapping is enabled. This manifests itself as ModuleNotFoundError: No module named 'packaging' when running tests.

Steps to Reproduce

  1. Install Python from python.org on Windows
  2. Build ITK with wrapping and tests
  3. Run tests
  4. Many Python tests fail

Versions

Main branch, though this probably affects all recent versions.

Environment

Windows 11, VS2026, Python 3.11.

Additional Information

$ ctest -C RelWithDebInfo -VV --rerun-failed
UpdateCTestConfiguration  from :C:/Misc/ITK-patches-rel-vs26/DartConfiguration.tcl
Parse Config file:C:/Misc/ITK-patches-rel-vs26/DartConfiguration.tcl
Test project C:/Misc/ITK-patches-rel-vs26
Constructing a list of tests
Done constructing a list of tests
Updating test list for fixtures
Added 0 tests to meet fixture requirements
Checking test dependency graph...
Checking test dependency graph end
test 3126
        Start 3126: PythonFindEmptyClasses

3126: Test command: C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\itkTestDriver.exe "--add-before-env" "PYTHONPATH" "C:/Misc/ITK-patches-rel-vs26/Wrapping/Generators/Python" "--add-before-env" "PYTHONPATH" "C:/Misc/ITK-patches-rel-vs26/Wrapping/Generators/Python/itk" "--add-before-libpath" "C:/Misc/ITK-patches-rel-vs26/Wrapping/Generators/Python/itk" "C:/Program Files/Python311/python.exe" "C:/Misc/ITK-patches-rel/Wrapping/Generators/Python/Tests/findEmptyClasses.py"
3126: Working Directory: C:/Misc/ITK-patches-rel/Wrapping/Generators/Python/Tests
3126: Test timeout computed to be: 1500
3126: Loading ITKPyBase... done
3126: Loading ITKCommon... Traceback (most recent call last):
3126:   File "C:\Misc\ITK-patches-rel\Wrapping\Generators\Python\Tests\findEmptyClasses.py", line 25, in <module>
3126:     itk.force_load()
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\support\init_helpers.py", line 116, in force_load
3126:     getattr(itk, k)
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\support\lazy.py", line 137, in __getattribute__
3126:     base.itk_load_swig_module(module, namespace)
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\support\base.py", line 95, in itk_load_swig_module
3126:     itk_load_swig_module(dep, namespace)
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\support\base.py", line 95, in itk_load_swig_module
3126:     itk_load_swig_module(dep, namespace)
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\support\base.py", line 95, in itk_load_swig_module
3126:     itk_load_swig_module(dep, namespace)
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\support\base.py", line 131, in itk_load_swig_module
3126:     l_module = loader.load(swig_module_name)
3126:                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\support\base.py", line 289, in load
3126:     l_spec.loader.exec_module(l_module)  # pytype: disable=attribute-error
3126:     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3126:   File "<frozen importlib._bootstrap_external>", line 940, in exec_module
3126:   File "<frozen importlib._bootstrap>", line 241, in _call_with_frames_removed
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\support\..\ITKCommonPython.py", line 64, in <module>
3126:     from itk.itkStreamingImageFilterPython import *
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\itkStreamingImageFilterPython.py", line 92, in <module>
3126:     import itk.itkImageToImageFilterAPython
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\itkImageToImageFilterAPython.py", line 101, in <module>
3126:     import itk.itkImageSourcePython
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\itkImageSourcePython.py", line 4142, in <module>
3126:     @helpers.accept_array_like_xarray_torch
3126:      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
3126:   File "C:\Misc\ITK-patches-rel-vs26\Wrapping\Generators\Python\itk\support\helpers.py", line 105, in accept_array_like_xarray_torch
3126:     import xarray as xr
3126:   File "C:\Program Files\Python311\Lib\site-packages\xarray\__init__.py", line 3, in <module>
3126:     from xarray import testing, tutorial
3126:   File "C:\Program Files\Python311\Lib\site-packages\xarray\testing\__init__.py", line 2, in <module>
3126:     from xarray.testing.assertions import (  # noqa: F401
3126:   File "C:\Program Files\Python311\Lib\site-packages\xarray\testing\assertions.py", line 11, in <module>
3126:     from xarray.core import duck_array_ops, formatting, utils
3126:   File "C:\Program Files\Python311\Lib\site-packages\xarray\core\duck_array_ops.py", line 34, in <module>
3126:     from packaging.version import Version
3126: ModuleNotFoundError: No module named 'packaging'
3126: itkTestDriver: Process exited with return value: 1
  1/169 Test #3126: PythonFindEmptyClasses ..................................................***Failed    1.21 sec

Metadata

Metadata

Assignees

No one assigned

    Labels

    type:BugInconsistencies or issues which will cause an incorrect result under some or all circumstances

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions