Skip to content

Drop distutils #3439

Closed
Closed
@effigies

Description

@effigies

Summary

distutils is deprecated. Here is the output of grep -rI distutils . in the nipype root:

./doc/changelog/0.X.X-changelog.rst:* ENH: Abandon distutils, only use setuptools (https://github.com/nipy/nipype/pull/1627)
./nipype/interfaces/afni/base.py:from distutils import spawn
./nipype/interfaces/dipy/preprocess.py:from distutils.version import LooseVersion
./nipype/interfaces/dipy/reconstruction.py:from distutils.version import LooseVersion
./nipype/interfaces/dipy/registration.py:from distutils.version import LooseVersion
./nipype/interfaces/dipy/setup.py:    from numpy.distutils.misc_util import Configuration
./nipype/interfaces/dipy/setup.py:    from numpy.distutils.core import setup
./nipype/interfaces/dipy/stats.py:from distutils.version import LooseVersion
./nipype/interfaces/dipy/tracks.py:from distutils.version import LooseVersion
./nipype/interfaces/mrtrix3/connectivity.py:            from distutils.spawn import find_executable
./nipype/interfaces/niftyreg/base.py:from distutils.version import StrictVersion
./nipype/interfaces/slicer/generate_classes.py:    from numpy.distutils.misc_util import Configuration
./nipype/interfaces/slicer/generate_classes.py:    from numpy.distutils.core import setup
./nipype/utils/misc.py:from distutils.version import LooseVersion
./nipype/utils/misc.py:        distutils.version.LooseVersion.
./nipype/utils/config.py:from distutils.version import LooseVersion
./nipype/__init__.py:from distutils.version import LooseVersion
./tools/toollib.py:from distutils.dir_util import remove_tree

We can break this down into groups:

  • LooseVersion - We import this directly from distutils in many places and also import it into nipype.__init__.py from which it is imported in many other places. The semantics of LooseVersion are not the same as packaging.version.Version, although in most places it should generally be close enough. Are we okay with a blanket replace?
  • StrictVersion - Probably safe to replace with Version?
  • distutils.spawn.find_executable - We can use shutil.which
  • numpy.distutils - Used in dipy/setup.py and files generated by slicer/generate_classes.py; I don't understand this use case so I'm hesitant to do anything.
  • distutils.dir_util.remove_tree - I don't think tools/toollib.py is part of anybody's workflow. Easier just to remove? Alternately, can use shutil.rmtree.

Assigning to 1.8 so that there will be a semver hurdle.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions