Skip to content

Commit 4ecf756

Browse files
authored
Merge pull request #1073 from effigies/mnt/drop_distutils
MNT: Drop uses of deprecated distutils
2 parents 1eb21d8 + 4fee9af commit 4ecf756

File tree

8 files changed

+27
-28
lines changed

8 files changed

+27
-28
lines changed

nibabel/cifti2/parse_cifti2.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,11 @@
77
#
88
### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ### ##
99

10-
from distutils.version import LooseVersion
11-
1210
import numpy as np
1311
from io import BytesIO
1412

13+
from packaging.version import Version, parse
14+
1515
from .cifti2 import (Cifti2MetaData, Cifti2Header, Cifti2Label,
1616
Cifti2LabelTable, Cifti2VertexIndices,
1717
Cifti2VoxelIndicesIJK, Cifti2BrainModel, Cifti2Matrix,
@@ -151,9 +151,9 @@ def StartElementHandler(self, name, attrs):
151151
if name == 'CIFTI':
152152
# create cifti2 image
153153
self.header = Cifti2Header()
154-
self.header.version = attrs['Version']
155-
if LooseVersion(self.header.version) < LooseVersion('2'):
156-
raise ValueError('Only CIFTI-2 files are supported')
154+
self.header.version = ver = attrs['Version']
155+
if parse(ver) < Version("2"):
156+
raise ValueError(f'Only CIFTI-2 files are supported; found version {ver}')
157157
self.fsm_state.append('CIFTI')
158158
self.struct_state.append(self.header)
159159

nibabel/cifti2/tests/test_cifti2io_header.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
from os.path import join as pjoin, dirname
1111
import io
1212

13-
from distutils.version import LooseVersion
13+
from packaging.version import Version
1414

1515
import nibabel as nib
1616
from nibabel import cifti2 as ci
@@ -80,7 +80,7 @@ def test_read_and_proxies():
8080
def test_version():
8181
for i, dat in enumerate(datafiles):
8282
img = nib.load(dat)
83-
assert LooseVersion(img.header.version) == LooseVersion('2')
83+
assert Version(img.header.version) == Version('2')
8484

8585

8686
@needs_nibabel_data('nitest-cifti2')

nibabel/data.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
import glob
1010
import sys
1111
import configparser
12-
from distutils.version import LooseVersion
12+
from packaging.version import Version
1313

1414
from .environment import get_nipy_user_dir, get_nipy_system_dir
1515

@@ -330,7 +330,7 @@ def datasource_or_bomber(pkg_def, **options):
330330
Parameters
331331
----------
332332
pkg_def : dict
333-
dict containing at least key 'relpath'. Can optioanlly have keys 'name'
333+
dict containing at least key 'relpath'. Can optionally have keys 'name'
334334
(package name), 'install hint' (for helpful error messages) and 'min
335335
version' giving the minimum necessary version string for the package.
336336
data_path : sequence of strings or None, optional
@@ -349,8 +349,7 @@ def datasource_or_bomber(pkg_def, **options):
349349
except DataError as e:
350350
return Bomber(sys_relpath, str(e))
351351
# check version
352-
if (version is None or
353-
LooseVersion(ds.version) >= LooseVersion(version)):
352+
if version is None or Version(ds.version) >= Version(version):
354353
return ds
355354
if 'name' in pkg_def:
356355
pkg_name = pkg_def['name']

nibabel/openers.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
import gzip
1414
import warnings
1515
from os.path import splitext
16-
from distutils.version import StrictVersion
16+
from packaging.version import Version
1717

1818
from nibabel.optpkg import optional_package
1919

@@ -25,11 +25,11 @@
2525
HAVE_INDEXED_GZIP = True
2626

2727
# < 0.7 - no good
28-
if StrictVersion(version) < StrictVersion('0.7.0'):
28+
if Version(version) < Version('0.7.0'):
2929
warnings.warn(f'indexed_gzip is present, but too old (>= 0.7.0 required): {version})')
3030
HAVE_INDEXED_GZIP = False
3131
# >= 0.8 SafeIndexedGzipFile renamed to IndexedGzipFile
32-
elif StrictVersion(version) < StrictVersion('0.8.0'):
32+
elif Version(version) < Version('0.8.0'):
3333
IndexedGzipFile = igzip.SafeIndexedGzipFile
3434
else:
3535
IndexedGzipFile = igzip.IndexedGzipFile

nibabel/optpkg.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
""" Routines to support optional packages """
2-
from distutils.version import LooseVersion
2+
from packaging.version import Version
33
from .tripwire import TripWire
44

55

66
def _check_pkg_version(pkg, min_version):
77
# Default version checking function
88
if isinstance(min_version, str):
9-
min_version = LooseVersion(min_version)
9+
min_version = Version(min_version)
1010
try:
11-
return min_version <= pkg.__version__
11+
return min_version <= Version(pkg.__version__)
1212
except AttributeError:
1313
return False
1414

@@ -24,9 +24,9 @@ def optional_package(name, trip_msg=None, min_version=None):
2424
message to give when someone tries to use the return package, but we
2525
could not import it at an acceptable version, and have returned a
2626
TripWire object instead. Default message if None.
27-
min_version : None or str or LooseVersion or callable
27+
min_version : None or str or Version or callable
2828
If None, do not specify a minimum version. If str, convert to a
29-
`distutils.version.LooseVersion`. If str or LooseVersion` compare to
29+
``packaging.version.Version``. If str or ``Version`` compare to
3030
version of package `name` with ``min_version <= pkg.__version__``. If
3131
callable, accepts imported ``pkg`` as argument, and returns value of
3232
callable is True for acceptable package versions, False otherwise.

nibabel/tests/test_h5py_compat.py

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
"""
66
import sys
77
import os
8-
from distutils.version import LooseVersion
8+
from packaging.version import Version
99
import numpy as np
1010

1111
from ..optpkg import optional_package
@@ -25,7 +25,7 @@ def test_optpkg_equivalence():
2525
if not have_h5py:
2626
assert not compat.have_h5py
2727
# Available when version is high enough
28-
elif LooseVersion(h5py.__version__) >= '2.10':
28+
elif Version(h5py.__version__) >= Version('2.10'):
2929
assert compat.have_h5py
3030

3131

@@ -35,11 +35,11 @@ def test_disabled_h5py_cases():
3535
# Recapitulate min_h5py conditions from _h5py_compat
3636
assert os.name == 'nt'
3737
assert (3,) <= sys.version_info < (3, 6)
38-
assert LooseVersion(h5py.__version__) < '2.10'
38+
assert Version(h5py.__version__) < Version('2.10')
3939
# Verify that the root cause is present
4040
# If any tests fail, they will likely be these, so they may be
4141
# ill-advised...
42-
if LooseVersion(np.__version__) < '1.18':
42+
if Version(np.__version__) < Version('1.18'):
4343
assert str(np.longdouble) == str(np.float64)
4444
else:
4545
assert str(np.longdouble) != str(np.float64)

nibabel/tests/test_openers.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import contextlib
1212
from gzip import GzipFile
1313
from io import BytesIO, UnsupportedOperation
14-
from distutils.version import StrictVersion
14+
from packaging.version import Version
1515
import hashlib
1616
import time
1717

@@ -106,7 +106,7 @@ def test_Opener_various():
106106
# indexed gzip is used by default, and drops file
107107
# handles by default, so we don't have a fileno.
108108
elif input.endswith('gz') and HAVE_INDEXED_GZIP and \
109-
StrictVersion(igzip.__version__) >= StrictVersion('0.7.0'):
109+
Version(igzip.__version__) >= Version('0.7.0'):
110110
with pytest.raises(igzip.NoHandleError):
111111
fobj.fileno()
112112
else:

nibabel/tests/test_optpkg.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@
55
import types
66
import sys
77
import builtins
8-
from distutils.version import LooseVersion
8+
from packaging.version import Version
99

1010
from unittest import SkipTest
1111
import pytest
@@ -67,10 +67,10 @@ def test_versions():
6767
# Now add a version
6868
fake_pkg.__version__ = '2.0'
6969
# We have fake_pkg > 1.0
70-
for min_ver in (None, '1.0', LooseVersion('1.0'), lambda pkg: True):
70+
for min_ver in (None, '1.0', Version('1.0'), lambda pkg: True):
7171
assert_good(fake_name, min_ver)
7272
# We never have fake_pkg > 100.0
73-
for min_ver in ('100.0', LooseVersion('100.0'), lambda pkg: False):
73+
for min_ver in ('100.0', Version('100.0'), lambda pkg: False):
7474
assert_bad(fake_name, min_ver)
7575
# Check error string for bad version
7676
pkg, _, _ = optional_package(fake_name, min_version='3.0')

0 commit comments

Comments
 (0)