From bae30bd49d6430641beeb18aecb7c3b08d368051 Mon Sep 17 00:00:00 2001 From: "Hans J. Johnson" Date: Fri, 11 Sep 2026 19:32:05 -0500 Subject: [PATCH] BUG: Replace distutils.version with a standard-library comparison Python 3.12 removed distutils, so every example guarding its minimum ITK version with distutils.version.StrictVersion fails at import: ModuleNotFoundError: No module named 'distutils' Compare the dotted version components as a tuple instead, which needs no import at all and keeps each example's existing minimum. SegmentBloodVessels and SegmentBloodVesselsWithMultiScaleHessianBasedMeasure called sys.exit() in that guard without importing sys; add the import. --- src/Bridge/VtkGlue/ConvertAnRGBitkImageTovtkImageData/Code.py | 4 +--- src/Bridge/VtkGlue/ConvertAnitkImageTovtkImageData/Code.py | 4 +--- src/Core/Common/AddOffsetToIndex/Code.py | 4 +--- src/Core/Common/StreamAPipeline/Code.py | 4 +--- src/Filtering/Colormap/CreateACustomColormap/Code.py | 4 +--- src/Filtering/ImageFeature/SegmentBloodVessels/Code.py | 4 ++-- .../ImageGradient/ApplyGradientRecursiveGaussian/Code.py | 4 +--- .../ApplyGradientRecursiveGaussianWithVectorInput/Code.py | 4 +--- .../Code.py | 4 ++-- .../Perform2DTranslationRegistrationWithMeanSquares/Code.py | 4 +--- 10 files changed, 12 insertions(+), 28 deletions(-) diff --git a/src/Bridge/VtkGlue/ConvertAnRGBitkImageTovtkImageData/Code.py b/src/Bridge/VtkGlue/ConvertAnRGBitkImageTovtkImageData/Code.py index 69e254c54..e091c134e 100755 --- a/src/Bridge/VtkGlue/ConvertAnRGBitkImageTovtkImageData/Code.py +++ b/src/Bridge/VtkGlue/ConvertAnRGBitkImageTovtkImageData/Code.py @@ -18,9 +18,7 @@ import itk import argparse -from distutils.version import StrictVersion - -if StrictVersion(itk.Version.GetITKVersion()) < StrictVersion("5.2.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (5, 2, 0): print("ITK 5.2.0 is required.") sys.exit(1) diff --git a/src/Bridge/VtkGlue/ConvertAnitkImageTovtkImageData/Code.py b/src/Bridge/VtkGlue/ConvertAnitkImageTovtkImageData/Code.py index f414416fc..3583275bf 100755 --- a/src/Bridge/VtkGlue/ConvertAnitkImageTovtkImageData/Code.py +++ b/src/Bridge/VtkGlue/ConvertAnitkImageTovtkImageData/Code.py @@ -18,9 +18,7 @@ import itk import argparse -from distutils.version import StrictVersion - -if StrictVersion(itk.Version.GetITKVersion()) < StrictVersion("5.2.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (5, 2, 0): print("ITK 5.2.0 is required.") sys.exit(1) diff --git a/src/Core/Common/AddOffsetToIndex/Code.py b/src/Core/Common/AddOffsetToIndex/Code.py index 79e6158c1..20e827662 100755 --- a/src/Core/Common/AddOffsetToIndex/Code.py +++ b/src/Core/Common/AddOffsetToIndex/Code.py @@ -17,9 +17,7 @@ import sys import itk -from distutils.version import StrictVersion as VS - -if VS(itk.Version.GetITKVersion()) < VS("4.9.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (4, 9, 0): print("ITK 4.9.0 is required.") sys.exit(1) diff --git a/src/Core/Common/StreamAPipeline/Code.py b/src/Core/Common/StreamAPipeline/Code.py index 088abec82..4b2c4ea52 100755 --- a/src/Core/Common/StreamAPipeline/Code.py +++ b/src/Core/Common/StreamAPipeline/Code.py @@ -18,9 +18,7 @@ import itk import argparse -from distutils.version import StrictVersion as VS - -if VS(itk.Version.GetITKVersion()) < VS("4.10.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (4, 10, 0): print("ITK 4.10.0 is required.") sys.exit(1) diff --git a/src/Filtering/Colormap/CreateACustomColormap/Code.py b/src/Filtering/Colormap/CreateACustomColormap/Code.py index b1bb0e324..dd084c810 100755 --- a/src/Filtering/Colormap/CreateACustomColormap/Code.py +++ b/src/Filtering/Colormap/CreateACustomColormap/Code.py @@ -18,9 +18,7 @@ import itk import argparse -from distutils.version import StrictVersion as VS - -if VS(itk.Version.GetITKVersion()) < VS("4.8.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (4, 8, 0): print("ITK 4.8.0 is required (see example documentation).") sys.exit(1) diff --git a/src/Filtering/ImageFeature/SegmentBloodVessels/Code.py b/src/Filtering/ImageFeature/SegmentBloodVessels/Code.py index 17b2d1403..426a3a2c4 100755 --- a/src/Filtering/ImageFeature/SegmentBloodVessels/Code.py +++ b/src/Filtering/ImageFeature/SegmentBloodVessels/Code.py @@ -16,10 +16,10 @@ import argparse +import sys import itk -from distutils.version import StrictVersion as VS -if VS(itk.Version.GetITKVersion()) < VS("5.0.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (5, 0, 0): print("ITK 5.0.0 or newer is required.") sys.exit(1) diff --git a/src/Filtering/ImageGradient/ApplyGradientRecursiveGaussian/Code.py b/src/Filtering/ImageGradient/ApplyGradientRecursiveGaussian/Code.py index 2c9bdb271..eb11c9b64 100755 --- a/src/Filtering/ImageGradient/ApplyGradientRecursiveGaussian/Code.py +++ b/src/Filtering/ImageGradient/ApplyGradientRecursiveGaussian/Code.py @@ -18,9 +18,7 @@ import itk import argparse -from distutils.version import StrictVersion as VS - -if VS(itk.Version.GetITKVersion()) < VS("4.7.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (4, 7, 0): print("ITK 4.7.0 is required (see example documentation).") sys.exit(1) diff --git a/src/Filtering/ImageGradient/ApplyGradientRecursiveGaussianWithVectorInput/Code.py b/src/Filtering/ImageGradient/ApplyGradientRecursiveGaussianWithVectorInput/Code.py index a69d32ef6..ae36c87ca 100755 --- a/src/Filtering/ImageGradient/ApplyGradientRecursiveGaussianWithVectorInput/Code.py +++ b/src/Filtering/ImageGradient/ApplyGradientRecursiveGaussianWithVectorInput/Code.py @@ -18,9 +18,7 @@ import itk import argparse -from distutils.version import StrictVersion as VS - -if VS(itk.Version.GetITKVersion()) < VS("4.8.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (4, 8, 0): print("ITK 4.8.0 is required (see example documentation).") sys.exit(1) diff --git a/src/Nonunit/Review/SegmentBloodVesselsWithMultiScaleHessianBasedMeasure/Code.py b/src/Nonunit/Review/SegmentBloodVesselsWithMultiScaleHessianBasedMeasure/Code.py index a49866c00..dd2ff60f8 100755 --- a/src/Nonunit/Review/SegmentBloodVesselsWithMultiScaleHessianBasedMeasure/Code.py +++ b/src/Nonunit/Review/SegmentBloodVesselsWithMultiScaleHessianBasedMeasure/Code.py @@ -16,10 +16,10 @@ import argparse +import sys import itk -from distutils.version import StrictVersion as VS -if VS(itk.Version.GetITKVersion()) < VS("5.0.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (5, 0, 0): print("ITK 5.0.0 or newer is required.") sys.exit(1) diff --git a/src/Registration/Common/Perform2DTranslationRegistrationWithMeanSquares/Code.py b/src/Registration/Common/Perform2DTranslationRegistrationWithMeanSquares/Code.py index b603afcdb..c06cc2dcd 100755 --- a/src/Registration/Common/Perform2DTranslationRegistrationWithMeanSquares/Code.py +++ b/src/Registration/Common/Perform2DTranslationRegistrationWithMeanSquares/Code.py @@ -18,9 +18,7 @@ import itk import argparse -from distutils.version import StrictVersion as VS - -if VS(itk.Version.GetITKVersion()) < VS("4.9.0"): +if tuple(int(v) for v in itk.Version.GetITKVersion().split(".")) < (4, 9, 0): print("ITK 4.9.0 is required.") sys.exit(1)