⚠️ Time to say goodbye to py37 (#24091)

* fix

---------

Co-authored-by: ydshieh <ydshieh@users.noreply.github.com>
This commit is contained in:
Yih-Dar 2023-06-28 07:22:39 +02:00 committed by GitHub
parent 12240925cf
commit e84bf1f734
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
17 changed files with 53 additions and 81 deletions

View File

@ -16,7 +16,6 @@ requirements:
- pip - pip
- numpy >=1.17 - numpy >=1.17
- dataclasses - dataclasses
- importlib_metadata
- huggingface_hub - huggingface_hub
- packaging - packaging
- filelock - filelock
@ -31,7 +30,6 @@ requirements:
- python - python
- numpy >=1.17 - numpy >=1.17
- dataclasses - dataclasses
- importlib_metadata
- huggingface_hub - huggingface_hub
- packaging - packaging
- filelock - filelock

View File

@ -17,7 +17,7 @@ jobs:
- name: Setup Python - name: Setup Python
uses: actions/setup-python@v4 uses: actions/setup-python@v4
with: with:
python-version: 3.7 python-version: 3.8
- name: Install requirements - name: Install requirements
run: | run: |

View File

@ -130,7 +130,7 @@ You will need basic `git` proficiency to contribute to
manual. Type `git --help` in a shell and enjoy! If you prefer books, [Pro manual. Type `git --help` in a shell and enjoy! If you prefer books, [Pro
Git](https://git-scm.com/book/en/v2) is a very good reference. Git](https://git-scm.com/book/en/v2) is a very good reference.
You'll need **[Python 3.7]((https://github.com/huggingface/transformers/blob/main/setup.py#L426))** or above to contribute to 🤗 Transformers. Follow the steps below to start contributing: You'll need **[Python 3.8]((https://github.com/huggingface/transformers/blob/main/setup.py#L426))** or above to contribute to 🤗 Transformers. Follow the steps below to start contributing:
1. Fork the [repository](https://github.com/huggingface/transformers) by 1. Fork the [repository](https://github.com/huggingface/transformers) by
clicking on the **[Fork](https://github.com/huggingface/transformers/fork)** button on the repository's page. This creates a copy of the code clicking on the **[Fork](https://github.com/huggingface/transformers/fork)** button on the repository's page. This creates a copy of the code

View File

@ -149,7 +149,7 @@ _deps = [
"pytest>=7.2.0", "pytest>=7.2.0",
"pytest-timeout", "pytest-timeout",
"pytest-xdist", "pytest-xdist",
"python>=3.7.0", "python>=3.8.0",
"ray[tune]", "ray[tune]",
"regex!=2019.12.17", "regex!=2019.12.17",
"requests", "requests",
@ -413,7 +413,6 @@ extras["agents"] = deps_list(
# when modifying the following list, make sure to update src/transformers/dependency_versions_check.py # when modifying the following list, make sure to update src/transformers/dependency_versions_check.py
install_requires = [ install_requires = [
deps["importlib_metadata"] + ";python_version<'3.8'", # importlib_metadata for Python versions that don't have it
deps["filelock"], # filesystem locks, e.g., to prevent parallel downloads deps["filelock"], # filesystem locks, e.g., to prevent parallel downloads
deps["huggingface-hub"], deps["huggingface-hub"],
deps["numpy"], deps["numpy"],
@ -444,7 +443,7 @@ setup(
zip_safe=False, zip_safe=False,
extras_require=extras, extras_require=extras,
entry_points={"console_scripts": ["transformers-cli=transformers.commands.transformers_cli:main"]}, entry_points={"console_scripts": ["transformers-cli=transformers.commands.transformers_cli:main"]},
python_requires=">=3.7.0", python_requires=">=3.8.0",
install_requires=install_requires, install_requires=install_requires,
classifiers=[ classifiers=[
"Development Status :: 5 - Production/Stable", "Development Status :: 5 - Production/Stable",
@ -454,7 +453,6 @@ setup(
"License :: OSI Approved :: Apache Software License", "License :: OSI Approved :: Apache Software License",
"Operating System :: OS Independent", "Operating System :: OS Independent",
"Programming Language :: Python :: 3", "Programming Language :: Python :: 3",
"Programming Language :: Python :: 3.7",
"Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.10",

View File

@ -11,7 +11,6 @@
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import sys
from .dependency_versions_table import deps from .dependency_versions_table import deps
from .utils.versions import require_version, require_version_core from .utils.versions import require_version, require_version_core
@ -38,9 +37,6 @@ pkgs_to_check_at_runtime = [
"pyyaml", "pyyaml",
] ]
if sys.version_info < (3, 8):
pkgs_to_check_at_runtime.append("importlib_metadata")
for pkg in pkgs_to_check_at_runtime: for pkg in pkgs_to_check_at_runtime:
if pkg in deps: if pkg in deps:
if pkg == "tokenizers": if pkg == "tokenizers":

View File

@ -54,7 +54,7 @@ deps = {
"pytest": "pytest>=7.2.0", "pytest": "pytest>=7.2.0",
"pytest-timeout": "pytest-timeout", "pytest-timeout": "pytest-timeout",
"pytest-xdist": "pytest-xdist", "pytest-xdist": "pytest-xdist",
"python": "python>=3.7.0", "python": "python>=3.8.0",
"ray[tune]": "ray[tune]", "ray[tune]": "ray[tune]",
"regex": "regex!=2019.12.17", "regex": "regex!=2019.12.17",
"requests": "requests", "requests": "requests",

View File

@ -21,19 +21,11 @@ from copy import copy
from enum import Enum from enum import Enum
from inspect import isclass from inspect import isclass
from pathlib import Path from pathlib import Path
from typing import Any, Callable, Dict, Iterable, List, NewType, Optional, Tuple, Union, get_type_hints from typing import Any, Callable, Dict, Iterable, List, Literal, NewType, Optional, Tuple, Union, get_type_hints
import yaml import yaml
try:
# For Python versions <3.8, Literal is not in typing: https://peps.python.org/pep-0586/
from typing import Literal
except ImportError:
# For Python 3.7
from typing_extensions import Literal
DataClass = NewType("DataClass", Any) DataClass = NewType("DataClass", Any)
DataClassType = NewType("DataClassType", Any) DataClassType = NewType("DataClassType", Any)

View File

@ -15,6 +15,7 @@
Integrations with other Python libraries. Integrations with other Python libraries.
""" """
import functools import functools
import importlib.metadata
import importlib.util import importlib.util
import json import json
import numbers import numbers
@ -31,7 +32,6 @@ import numpy as np
from . import __version__ as version from . import __version__ as version
from .utils import flatten_dict, is_datasets_available, is_pandas_available, is_torch_available, logging from .utils import flatten_dict, is_datasets_available, is_pandas_available, is_torch_available, logging
from .utils.versions import importlib_metadata
logger = logging.get_logger(__name__) logger = logging.get_logger(__name__)
@ -59,13 +59,13 @@ _has_neptune = (
) )
if TYPE_CHECKING and _has_neptune: if TYPE_CHECKING and _has_neptune:
try: try:
_neptune_version = importlib_metadata.version("neptune") _neptune_version = importlib.metadata.version("neptune")
logger.info(f"Neptune version {_neptune_version} available.") logger.info(f"Neptune version {_neptune_version} available.")
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
try: try:
_neptune_version = importlib_metadata.version("neptune-client") _neptune_version = importlib.metadata.version("neptune-client")
logger.info(f"Neptune-client version {_neptune_version} available.") logger.info(f"Neptune-client version {_neptune_version} available.")
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
_has_neptune = False _has_neptune = False
from .trainer_callback import ProgressCallback, TrainerCallback # noqa: E402 from .trainer_callback import ProgressCallback, TrainerCallback # noqa: E402
@ -367,10 +367,8 @@ def run_hp_search_ray(trainer, n_trials: int, direction: str, **kwargs) -> BestR
def run_hp_search_sigopt(trainer, n_trials: int, direction: str, **kwargs) -> BestRun: def run_hp_search_sigopt(trainer, n_trials: int, direction: str, **kwargs) -> BestRun:
import sigopt import sigopt
from transformers.utils.versions import importlib_metadata
if trainer.args.process_index == 0: if trainer.args.process_index == 0:
if importlib_metadata.version("sigopt") >= "8.0.0": if importlib.metadata.version("sigopt") >= "8.0.0":
sigopt.set_project("huggingface") sigopt.set_project("huggingface")
experiment = sigopt.create_experiment( experiment = sigopt.create_experiment(

View File

@ -15,6 +15,7 @@
# limitations under the License. # limitations under the License.
import collections import collections
import gc import gc
import importlib.metadata
import inspect import inspect
import json import json
import os import os
@ -73,7 +74,7 @@ from .utils import (
replace_return_docstrings, replace_return_docstrings,
) )
from .utils.hub import convert_file_size_to_int, get_checkpoint_shard_files from .utils.hub import convert_file_size_to_int, get_checkpoint_shard_files
from .utils.import_utils import ENV_VARS_TRUE_VALUES, importlib_metadata, is_sagemaker_mp_enabled from .utils.import_utils import ENV_VARS_TRUE_VALUES, is_sagemaker_mp_enabled
from .utils.quantization_config import BitsAndBytesConfig from .utils.quantization_config import BitsAndBytesConfig
from .utils.versions import require_version_core from .utils.versions import require_version_core
@ -2203,7 +2204,7 @@ class PreTrainedModel(nn.Module, ModuleUtilsMixin, GenerationMixin, PushToHubMix
use_safetensors = False use_safetensors = False
if is_bitsandbytes_available(): if is_bitsandbytes_available():
is_8bit_serializable = version.parse(importlib_metadata.version("bitsandbytes")) > version.parse("0.37.2") is_8bit_serializable = version.parse(importlib.metadata.version("bitsandbytes")) > version.parse("0.37.2")
else: else:
is_8bit_serializable = False is_8bit_serializable = False
@ -2738,7 +2739,7 @@ class PreTrainedModel(nn.Module, ModuleUtilsMixin, GenerationMixin, PushToHubMix
modules_to_not_convert.extend(keys_on_cpu) modules_to_not_convert.extend(keys_on_cpu)
supports_4bit = version.parse(importlib_metadata.version("bitsandbytes")) >= version.parse("0.39.0") supports_4bit = version.parse(importlib.metadata.version("bitsandbytes")) >= version.parse("0.39.0")
if load_in_4bit and not supports_4bit: if load_in_4bit and not supports_4bit:
raise ValueError( raise ValueError(
@ -2751,7 +2752,7 @@ class PreTrainedModel(nn.Module, ModuleUtilsMixin, GenerationMixin, PushToHubMix
) )
# training in 8-bit is only available in 0.37.0+ # training in 8-bit is only available in 0.37.0+
model._is_quantized_training_enabled = version.parse( model._is_quantized_training_enabled = version.parse(
importlib_metadata.version("bitsandbytes") importlib.metadata.version("bitsandbytes")
) >= version.parse("0.37.0") ) >= version.parse("0.37.0")
model.config.quantization_config = quantization_config model.config.quantization_config = quantization_config
@ -2786,7 +2787,7 @@ class PreTrainedModel(nn.Module, ModuleUtilsMixin, GenerationMixin, PushToHubMix
target_dtype = torch_dtype target_dtype = torch_dtype
if load_in_4bit: if load_in_4bit:
if version.parse(importlib_metadata.version("accelerate")) > version.parse("0.19.0"): if version.parse(importlib.metadata.version("accelerate")) > version.parse("0.19.0"):
from accelerate.utils import CustomDtype from accelerate.utils import CustomDtype
target_dtype = CustomDtype.INT4 target_dtype = CustomDtype.INT4

View File

@ -1,10 +1,11 @@
import importlib.metadata
import warnings import warnings
from copy import deepcopy from copy import deepcopy
from packaging import version from packaging import version
from ..utils import logging from ..utils import logging
from .import_utils import importlib_metadata, is_accelerate_available, is_bitsandbytes_available from .import_utils import is_accelerate_available, is_bitsandbytes_available
if is_bitsandbytes_available(): if is_bitsandbytes_available():
@ -75,7 +76,7 @@ def set_module_quantized_tensor_to_device(module, tensor_name, device, value=Non
elif isinstance(value, torch.Tensor): elif isinstance(value, torch.Tensor):
new_value = value.to("cpu") new_value = value.to("cpu")
if value.dtype == torch.int8: if value.dtype == torch.int8:
is_8bit_serializable = version.parse(importlib_metadata.version("bitsandbytes")) > version.parse( is_8bit_serializable = version.parse(importlib.metadata.version("bitsandbytes")) > version.parse(
"0.37.2" "0.37.2"
) )
if not is_8bit_serializable: if not is_8bit_serializable:

View File

@ -15,6 +15,7 @@
Import utilities: Utilities related to imports and our lazy inits. Import utilities: Utilities related to imports and our lazy inits.
""" """
import importlib.metadata
import importlib.util import importlib.util
import json import json
import os import os
@ -31,7 +32,6 @@ from typing import Any, Tuple, Union
from packaging import version from packaging import version
from . import logging from . import logging
from .versions import importlib_metadata
logger = logging.get_logger(__name__) # pylint: disable=invalid-name logger = logging.get_logger(__name__) # pylint: disable=invalid-name
@ -44,9 +44,9 @@ def _is_package_available(pkg_name: str, return_version: bool = False) -> Union[
package_version = "N/A" package_version = "N/A"
if package_exists: if package_exists:
try: try:
package_version = importlib_metadata.version(pkg_name) package_version = importlib.metadata.version(pkg_name)
package_exists = True package_exists = True
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
package_exists = False package_exists = False
logger.debug(f"Detected {pkg_name} version {package_version}") logger.debug(f"Detected {pkg_name} version {package_version}")
if return_version: if return_version:
@ -71,7 +71,7 @@ TORCH_FX_REQUIRED_VERSION = version.parse("1.10")
_accelerate_available, _accelerate_version = _is_package_available("accelerate", return_version=True) _accelerate_available, _accelerate_version = _is_package_available("accelerate", return_version=True)
_apex_available = _is_package_available("apex") _apex_available = _is_package_available("apex")
_bitsandbytes_available = _is_package_available("bitsandbytes") _bitsandbytes_available = _is_package_available("bitsandbytes")
# `importlib_metadata.version` doesn't work with `bs4` but `beautifulsoup4`. For `importlib.util.find_spec`, reversed. # `importlib.metadata.version` doesn't work with `bs4` but `beautifulsoup4`. For `importlib.util.find_spec`, reversed.
_bs4_available = importlib.util.find_spec("bs4") is not None _bs4_available = importlib.util.find_spec("bs4") is not None
_coloredlogs_available = _is_package_available("coloredlogs") _coloredlogs_available = _is_package_available("coloredlogs")
_datasets_available = _is_package_available("datasets") _datasets_available = _is_package_available("datasets")
@ -80,13 +80,13 @@ _detectron2_available = _is_package_available("detectron2")
# We need to check both `faiss` and `faiss-cpu`. # We need to check both `faiss` and `faiss-cpu`.
_faiss_available = importlib.util.find_spec("faiss") is not None _faiss_available = importlib.util.find_spec("faiss") is not None
try: try:
_faiss_version = importlib_metadata.version("faiss") _faiss_version = importlib.metadata.version("faiss")
logger.debug(f"Successfully imported faiss version {_faiss_version}") logger.debug(f"Successfully imported faiss version {_faiss_version}")
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
try: try:
_faiss_version = importlib_metadata.version("faiss-cpu") _faiss_version = importlib.metadata.version("faiss-cpu")
logger.debug(f"Successfully imported faiss version {_faiss_version}") logger.debug(f"Successfully imported faiss version {_faiss_version}")
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
_faiss_available = False _faiss_available = False
_ftfy_available = _is_package_available("ftfy") _ftfy_available = _is_package_available("ftfy")
_ipex_available, _ipex_version = _is_package_available("intel_extension_for_pytorch", return_version=True) _ipex_available, _ipex_version = _is_package_available("intel_extension_for_pytorch", return_version=True)
@ -115,8 +115,8 @@ _sentencepiece_available = _is_package_available("sentencepiece")
_sklearn_available = importlib.util.find_spec("sklearn") is not None _sklearn_available = importlib.util.find_spec("sklearn") is not None
if _sklearn_available: if _sklearn_available:
try: try:
importlib_metadata.version("scikit-learn") importlib.metadata.version("scikit-learn")
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
_sklearn_available = False _sklearn_available = False
_smdistributed_available = importlib.util.find_spec("smdistributed") is not None _smdistributed_available = importlib.util.find_spec("smdistributed") is not None
_soundfile_available = _is_package_available("soundfile") _soundfile_available = _is_package_available("soundfile")
@ -168,9 +168,9 @@ else:
# For the metadata, we have to look for both tensorflow and tensorflow-cpu # For the metadata, we have to look for both tensorflow and tensorflow-cpu
for pkg in candidates: for pkg in candidates:
try: try:
_tf_version = importlib_metadata.version(pkg) _tf_version = importlib.metadata.version(pkg)
break break
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
pass pass
_tf_available = _tf_version is not None _tf_available = _tf_version is not None
if _tf_available: if _tf_available:
@ -189,9 +189,9 @@ _is_ccl_available = (
or importlib.util.find_spec("oneccl_bindings_for_pytorch") is not None or importlib.util.find_spec("oneccl_bindings_for_pytorch") is not None
) )
try: try:
ccl_version = importlib_metadata.version("oneccl_bind_pt") ccl_version = importlib.metadata.version("oneccl_bind_pt")
logger.debug(f"Detected oneccl_bind_pt version {ccl_version}") logger.debug(f"Detected oneccl_bind_pt version {ccl_version}")
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
_is_ccl_available = False _is_ccl_available = False
@ -530,8 +530,8 @@ def is_vision_available():
_pil_available = importlib.util.find_spec("PIL") is not None _pil_available = importlib.util.find_spec("PIL") is not None
if _pil_available: if _pil_available:
try: try:
package_version = importlib_metadata.version("Pillow") package_version = importlib.metadata.version("Pillow")
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
return False return False
logger.debug(f"Detected PIL version {package_version}") logger.debug(f"Detected PIL version {package_version}")
return _pil_available return _pil_available

View File

@ -15,6 +15,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import copy import copy
import importlib.metadata
import json import json
import os import os
from dataclasses import dataclass from dataclasses import dataclass
@ -23,7 +24,6 @@ from typing import Any, Dict, Union
from packaging import version from packaging import version
from ..utils import is_torch_available, logging from ..utils import is_torch_available, logging
from ..utils.import_utils import importlib_metadata
if is_torch_available(): if is_torch_available():
@ -141,7 +141,7 @@ class BitsAndBytesConfig:
if not isinstance(self.bnb_4bit_use_double_quant, bool): if not isinstance(self.bnb_4bit_use_double_quant, bool):
raise ValueError("bnb_4bit_use_double_quant must be a boolean") raise ValueError("bnb_4bit_use_double_quant must be a boolean")
if self.load_in_4bit and not version.parse(importlib_metadata.version("bitsandbytes")) >= version.parse( if self.load_in_4bit and not version.parse(importlib.metadata.version("bitsandbytes")) >= version.parse(
"0.39.0" "0.39.0"
): ):
raise ValueError( raise ValueError(

View File

@ -15,6 +15,7 @@
Utilities for working with package versions Utilities for working with package versions
""" """
import importlib.metadata
import operator import operator
import re import re
import sys import sys
@ -23,13 +24,6 @@ from typing import Optional
from packaging import version from packaging import version
# The package importlib_metadata is in a different place, depending on the python version.
if sys.version_info < (3, 8):
import importlib_metadata
else:
import importlib.metadata as importlib_metadata
ops = { ops = {
"<": operator.lt, "<": operator.lt,
"<=": operator.le, "<=": operator.le,
@ -56,7 +50,7 @@ def require_version(requirement: str, hint: Optional[str] = None) -> None:
""" """
Perform a runtime check of the dependency versions, using the exact same syntax used by pip. Perform a runtime check of the dependency versions, using the exact same syntax used by pip.
The installed module version comes from the *site-packages* dir via *importlib_metadata*. The installed module version comes from the *site-packages* dir via *importlib.metadata*.
Args: Args:
requirement (`str`): pip style definition, e.g., "tokenizers==0.9.4", "tqdm>=4.27", "numpy" requirement (`str`): pip style definition, e.g., "tokenizers==0.9.4", "tqdm>=4.27", "numpy"
@ -105,9 +99,9 @@ def require_version(requirement: str, hint: Optional[str] = None) -> None:
# check if any version is installed # check if any version is installed
try: try:
got_ver = importlib_metadata.version(pkg) got_ver = importlib.metadata.version(pkg)
except importlib_metadata.PackageNotFoundError: except importlib.metadata.PackageNotFoundError:
raise importlib_metadata.PackageNotFoundError( raise importlib.metadata.PackageNotFoundError(
f"The '{requirement}' distribution was not found and is required by this application. {hint}" f"The '{requirement}' distribution was not found and is required by this application. {hint}"
) )

View File

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import gc import gc
import importlib.metadata
import tempfile import tempfile
import unittest import unittest
@ -36,7 +37,6 @@ from transformers.testing_utils import (
require_torch_multi_gpu, require_torch_multi_gpu,
slow, slow,
) )
from transformers.utils.versions import importlib_metadata
def get_some_linear_layer(model): def get_some_linear_layer(model):
@ -446,7 +446,7 @@ class Bnb4BitTestTraining(Base4bitTest):
super().setUp() super().setUp()
def test_training(self): def test_training(self):
if version.parse(importlib_metadata.version("bitsandbytes")) < version.parse("0.37.0"): if version.parse(importlib.metadata.version("bitsandbytes")) < version.parse("0.37.0"):
return return
# Step 1: freeze all parameters # Step 1: freeze all parameters

View File

@ -13,6 +13,7 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import gc import gc
import importlib.metadata
import tempfile import tempfile
import unittest import unittest
@ -38,7 +39,6 @@ from transformers.testing_utils import (
require_torch_multi_gpu, require_torch_multi_gpu,
slow, slow,
) )
from transformers.utils.versions import importlib_metadata
def get_some_linear_layer(model): def get_some_linear_layer(model):
@ -722,7 +722,7 @@ class MixedInt8TestTraining(BaseMixedInt8Test):
super().setUp() super().setUp()
def test_training(self): def test_training(self):
if version.parse(importlib_metadata.version("bitsandbytes")) < version.parse("0.37.0"): if version.parse(importlib.metadata.version("bitsandbytes")) < version.parse("0.37.0"):
return return
# Step 1: freeze all parameters # Step 1: freeze all parameters

View File

@ -22,7 +22,7 @@ from argparse import Namespace
from dataclasses import dataclass, field from dataclasses import dataclass, field
from enum import Enum from enum import Enum
from pathlib import Path from pathlib import Path
from typing import List, Optional from typing import List, Literal, Optional
import yaml import yaml
@ -30,13 +30,6 @@ from transformers import HfArgumentParser, TrainingArguments
from transformers.hf_argparser import make_choice_type_function, string_to_bool from transformers.hf_argparser import make_choice_type_function, string_to_bool
try:
# For Python versions <3.8, Literal is not in typing: https://peps.python.org/pep-0586/
from typing import Literal
except ImportError:
# For Python 3.7
from typing_extensions import Literal
# Since Python 3.10, we can use the builtin `|` operator for Union types # Since Python 3.10, we can use the builtin `|` operator for Union types
# See PEP 604: https://peps.python.org/pep-0604 # See PEP 604: https://peps.python.org/pep-0604
is_python_no_less_than_3_10 = sys.version_info >= (3, 10) is_python_no_less_than_3_10 = sys.version_info >= (3, 10)

View File

@ -12,13 +12,14 @@
# See the License for the specific language governing permissions and # See the License for the specific language governing permissions and
# limitations under the License. # limitations under the License.
import importlib.metadata
import sys import sys
from transformers.testing_utils import TestCasePlus from transformers.testing_utils import TestCasePlus
from transformers.utils.versions import importlib_metadata, require_version, require_version_core from transformers.utils.versions import require_version, require_version_core
numpy_ver = importlib_metadata.version("numpy") numpy_ver = importlib.metadata.version("numpy")
python_ver = ".".join([str(x) for x in sys.version_info[:3]]) python_ver = ".".join([str(x) for x in sys.version_info[:3]])
@ -65,7 +66,7 @@ class DependencyVersionCheckTest(TestCasePlus):
for req in ["numpipypie>1", "numpipypie2"]: for req in ["numpipypie>1", "numpipypie2"]:
try: try:
require_version_core(req) require_version_core(req)
except importlib_metadata.PackageNotFoundError as e: except importlib.metadata.PackageNotFoundError as e:
self.assertIn(f"The '{req}' distribution was not found and is required by this application", str(e)) self.assertIn(f"The '{req}' distribution was not found and is required by this application", str(e))
self.assertIn("Try: pip install transformers -U", str(e)) self.assertIn("Try: pip install transformers -U", str(e))