Skip to content

Commit

Permalink
DEPS: remove most of distutils usage pandas-dev#41199
Browse files Browse the repository at this point in the history
  • Loading branch information
fangchenli committed Apr 28, 2021
1 parent 244ae51 commit 2153645
Show file tree
Hide file tree
Showing 22 changed files with 78 additions and 79 deletions.
5 changes: 3 additions & 2 deletions pandas/compat/_optional.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,12 @@
from __future__ import annotations

import distutils.version
import importlib
import sys
import types
import warnings

from packaging.version import Version

# Update install.rst when updating versions!

VERSIONS = {
Expand Down Expand Up @@ -128,7 +129,7 @@ def import_optional_dependency(
minimum_version = min_version if min_version is not None else VERSIONS.get(parent)
if minimum_version:
version = get_version(module_to_get)
if distutils.version.LooseVersion(version) < minimum_version:
if Version(version) < Version(minimum_version):
msg = (
f"Pandas requires version '{minimum_version}' or newer of '{parent}' "
f"(version '{version}' currently installed)."
Expand Down
12 changes: 6 additions & 6 deletions pandas/compat/numpy/__init__.py
Original file line number Diff line number Diff line change
@@ -1,21 +1,21 @@
""" support numpy compatibility across versions """

from distutils.version import LooseVersion
import re

import numpy as np
from packaging.version import Version

# numpy versioning
_np_version = np.__version__
_nlv = LooseVersion(_np_version)
np_version_under1p18 = _nlv < LooseVersion("1.18")
np_version_under1p19 = _nlv < LooseVersion("1.19")
np_version_under1p20 = _nlv < LooseVersion("1.20")
_nlv = Version(_np_version)
np_version_under1p18 = _nlv < Version("1.18")
np_version_under1p19 = _nlv < Version("1.19")
np_version_under1p20 = _nlv < Version("1.20")
is_numpy_dev = ".dev" in str(_nlv)
_min_numpy_ver = "1.17.3"


if _nlv < _min_numpy_ver:
if _nlv < Version(_min_numpy_ver):
raise ImportError(
f"this version of pandas is incompatible with numpy < {_min_numpy_ver}\n"
f"your numpy version is {_np_version}.\n"
Expand Down
4 changes: 2 additions & 2 deletions pandas/compat/numpy/function.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,6 @@
methods that are spread throughout the codebase. This module will make it
easier to adjust to future upstream changes in the analogous numpy signatures.
"""
from distutils.version import LooseVersion
from typing import (
Any,
Dict,
Expand All @@ -27,6 +26,7 @@
__version__,
ndarray,
)
from packaging.version import Version

from pandas._libs.lib import (
is_bool,
Expand Down Expand Up @@ -128,7 +128,7 @@ def validate_argmax_with_skipna(skipna, args, kwargs):
ARGSORT_DEFAULTS["kind"] = "quicksort"
ARGSORT_DEFAULTS["order"] = None

if LooseVersion(__version__) >= LooseVersion("1.17.0"):
if Version(__version__) >= Version("1.17.0"):
# GH-26361. NumPy added radix sort and changed default to None.
ARGSORT_DEFAULTS["kind"] = None

Expand Down
4 changes: 2 additions & 2 deletions pandas/core/arrays/_arrow_utils.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
from distutils.version import LooseVersion
import json

import numpy as np
from packaging.version import Version
import pyarrow

from pandas.core.arrays.interval import VALID_CLOSED

_pyarrow_version_ge_015 = LooseVersion(pyarrow.__version__) >= LooseVersion("0.15")
_pyarrow_version_ge_015 = Version(pyarrow.__version__) >= Version("0.15")


def pyarrow_array_to_numpy_and_mask(arr, dtype):
Expand Down
6 changes: 3 additions & 3 deletions pandas/core/arrays/string_arrow.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
from __future__ import annotations

from distutils.version import LooseVersion
from typing import (
TYPE_CHECKING,
Any,
Expand All @@ -9,6 +8,7 @@
)

import numpy as np
from packaging.version import Version

from pandas._libs import (
lib,
Expand Down Expand Up @@ -54,7 +54,7 @@
# PyArrow backed StringArrays are available starting at 1.0.0, but this
# file is imported from even if pyarrow is < 1.0.0, before pyarrow.compute
# and its compute functions existed. GH38801
if LooseVersion(pa.__version__) >= "1.0.0":
if Version(pa.__version__) >= Version("1.0.0"):
import pyarrow.compute as pc

ARROW_CMP_FUNCS = {
Expand Down Expand Up @@ -222,7 +222,7 @@ def __init__(self, values):
def _chk_pyarrow_available(cls) -> None:
# TODO: maybe update import_optional_dependency to allow a minimum
# version to be specified rather than use the global minimum
if pa is None or LooseVersion(pa.__version__) < "1.0.0":
if pa is None or Version(pa.__version__) < Version("1.0.0"):
msg = "pyarrow>=1.0.0 is required for PyArrow backed StringArray."
raise ImportError(msg)

Expand Down
4 changes: 2 additions & 2 deletions pandas/core/computation/ops.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@
from __future__ import annotations

from datetime import datetime
from distutils.version import LooseVersion
from functools import partial
import operator
from typing import (
Expand All @@ -14,6 +13,7 @@
)

import numpy as np
from packaging.version import Version

from pandas._libs.tslibs import Timestamp

Expand Down Expand Up @@ -623,7 +623,7 @@ def __init__(self, name: str):

if name not in MATHOPS or (
NUMEXPR_INSTALLED
and NUMEXPR_VERSION < LooseVersion("2.6.9")
and Version(NUMEXPR_VERSION) < Version("2.6.9")
and name in ("floor", "ceil")
):
raise ValueError(f'"{name}" is not a supported function')
Expand Down
4 changes: 2 additions & 2 deletions pandas/core/util/numba_.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
"""Common utilities for Numba operations"""
from distutils.version import LooseVersion
import types
from typing import (
Callable,
Expand All @@ -9,6 +8,7 @@
)

import numpy as np
from packaging.version import Version

from pandas.compat._optional import import_optional_dependency
from pandas.errors import NumbaUtilError
Expand Down Expand Up @@ -89,7 +89,7 @@ def jit_user_function(
"""
numba = import_optional_dependency("numba")

if LooseVersion(numba.__version__) >= LooseVersion("0.49.0"):
if Version(numba.__version__) >= Version("0.49.0"):
is_jitted = numba.extending.is_jitted(func)
else:
is_jitted = isinstance(func, numba.targets.registry.CPUDispatcher)
Expand Down
4 changes: 2 additions & 2 deletions pandas/io/clipboard/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -51,9 +51,9 @@
get_errno,
sizeof,
)
import distutils.spawn
import os
import platform
from shutil import which
import subprocess
import time
import warnings
Expand Down Expand Up @@ -528,7 +528,7 @@ def determine_clipboard():
return init_windows_clipboard()

if platform.system() == "Linux":
if distutils.spawn.find_executable("wslconfig.exe"):
if which("wslconfig.exe"):
return init_wsl_clipboard()

# Setup for the MAC OS X platform:
Expand Down
5 changes: 3 additions & 2 deletions pandas/io/excel/_base.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

import abc
import datetime
from distutils.version import LooseVersion
import inspect
from io import BytesIO
import os
Expand All @@ -15,6 +14,8 @@
import warnings
import zipfile

from packaging.version import Version

from pandas._config import config

from pandas._libs.parsers import STR_NA_VALUES
Expand Down Expand Up @@ -1147,7 +1148,7 @@ def __init__(
else:
import xlrd

xlrd_version = LooseVersion(get_version(xlrd))
xlrd_version = Version(get_version(xlrd))

ext = None
if engine is None:
Expand Down
5 changes: 3 additions & 2 deletions pandas/io/parquet.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
""" parquet compat """
from __future__ import annotations

from distutils.version import LooseVersion
import io
import os
from typing import (
Expand All @@ -10,6 +9,8 @@
)
from warnings import catch_warnings

from packaging.version import Version

from pandas._typing import (
FilePathOrBuffer,
StorageOptions,
Expand Down Expand Up @@ -210,7 +211,7 @@ def read(

to_pandas_kwargs = {}
if use_nullable_dtypes:
if LooseVersion(self.api.__version__) >= "0.16":
if Version(self.api.__version__) >= Version("0.16"):
import pandas as pd

mapping = {
Expand Down
4 changes: 2 additions & 2 deletions pandas/io/sql.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,6 @@
datetime,
time,
)
from distutils.version import LooseVersion
from functools import partial
import re
from typing import (
Expand All @@ -24,6 +23,7 @@
import warnings

import numpy as np
from packaging.version import Version

import pandas._libs.lib as lib
from pandas._typing import DtypeArg
Expand Down Expand Up @@ -83,7 +83,7 @@ def _gt14() -> bool:
"""
import sqlalchemy

return LooseVersion(sqlalchemy.__version__) >= LooseVersion("1.4.0")
return Version(sqlalchemy.__version__) >= Version("1.4.0")


def _convert_params(sql, params):
Expand Down
5 changes: 3 additions & 2 deletions pandas/plotting/_matplotlib/compat.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,8 @@
# being a bit too dynamic
from distutils.version import LooseVersion
import operator

from packaging.version import Version


def _mpl_version(version, op):
def inner():
Expand All @@ -10,7 +11,7 @@ def inner():
except ImportError:
return False
return (
op(LooseVersion(mpl.__version__), LooseVersion(version))
op(Version(mpl.__version__), Version(version))
and str(mpl.__version__)[0] != "0"
)

Expand Down
5 changes: 2 additions & 3 deletions pandas/tests/computation/test_compat.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from distutils.version import LooseVersion

from packaging.version import Version
import pytest

from pandas.compat._optional import VERSIONS
Expand All @@ -18,7 +17,7 @@ def test_compat():
import numexpr as ne

ver = ne.__version__
if LooseVersion(ver) < LooseVersion(VERSIONS["numexpr"]):
if Version(ver) < Version(VERSIONS["numexpr"]):
assert not NUMEXPR_INSTALLED
else:
assert NUMEXPR_INSTALLED
Expand Down
6 changes: 3 additions & 3 deletions pandas/tests/computation/test_eval.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from distutils.version import LooseVersion
from functools import reduce
from itertools import product
import operator
Expand All @@ -10,6 +9,7 @@
import warnings

import numpy as np
from packaging.version import Version
import pytest

from pandas.errors import PerformanceWarning
Expand Down Expand Up @@ -78,14 +78,14 @@ def parser(request):

@pytest.fixture
def ne_lt_2_6_9():
if NUMEXPR_INSTALLED and NUMEXPR_VERSION >= LooseVersion("2.6.9"):
if NUMEXPR_INSTALLED and NUMEXPR_VERSION >= Version("2.6.9"):
pytest.skip("numexpr is >= 2.6.9")
return "numexpr"


def _get_unary_fns_for_ne():
if NUMEXPR_INSTALLED:
if NUMEXPR_VERSION >= LooseVersion("2.6.9"):
if NUMEXPR_VERSION >= Version("2.6.9"):
return list(_unary_math_ops)
else:
return [x for x in _unary_math_ops if x not in ["floor", "ceil"]]
Expand Down
5 changes: 2 additions & 3 deletions pandas/tests/io/excel/__init__.py
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
from distutils.version import LooseVersion

from packaging.version import Version
import pytest

from pandas.compat._optional import (
Expand Down Expand Up @@ -32,4 +31,4 @@
else:
import xlrd

xlrd_version = LooseVersion(get_version(xlrd))
xlrd_version = Version(get_version(xlrd))
6 changes: 3 additions & 3 deletions pandas/tests/io/generate_legacy_storage_files.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,13 +33,13 @@
"""

from datetime import timedelta
from distutils.version import LooseVersion
import os
import pickle
import platform as pl
import sys

import numpy as np
from packaging.version import Version

import pandas
from pandas import (
Expand Down Expand Up @@ -88,7 +88,7 @@
from pandas.core.sparse.api import SparseArray


_loose_version = LooseVersion(pandas.__version__)
_loose_version = Version(pandas.__version__)


def _create_sp_series():
Expand Down Expand Up @@ -155,7 +155,7 @@ def create_data():

index["range"] = RangeIndex(10)

if _loose_version >= LooseVersion("0.21"):
if _loose_version >= Version("0.21"):
from pandas import interval_range

index["interval"] = interval_range(0, periods=10)
Expand Down
4 changes: 2 additions & 2 deletions pandas/tests/io/pytables/test_select.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
from distutils.version import LooseVersion
from warnings import catch_warnings

import numpy as np
from packaging.version import Version
import pytest

from pandas._libs.tslibs import Timestamp
Expand Down Expand Up @@ -862,7 +862,7 @@ def test_select_as_multiple(setup_path):


@pytest.mark.skipif(
LooseVersion(tables.__version__) < LooseVersion("3.1.0"),
Version(tables.__version__) < Version("3.1.0"),
reason=("tables version does not support fix for nan selection bug: GH 4858"),
)
def test_nan_selection_bug_4858(setup_path):
Expand Down

0 comments on commit 2153645

Please sign in to comment.