mirror of
https://github.com/huggingface/transformers.git
synced 2025-08-01 02:31:11 +06:00

* implement support for run-time dependency version checking * try not escaping ! * use findall that works on py36 * small tweaks * autoformatter worship * simplify * shorter names * add support for non-versioned checks * add deps * revert * tokenizers not required, check version only if installed * make a proper distutils cmd and add make target * tqdm must be checked before tokenizers * workaround the DistributionNotFound peculiar setup * handle the rest of packages in setup.py * fully sync setup.py's install_requires - to check them all * nit * make install_requires more readable * typo * Update setup.py Co-authored-by: Sylvain Gugger <35901082+sgugger@users.noreply.github.com> * restyle * add types * simplify * simplify2 Co-authored-by: Sylvain Gugger <35901082+sgugger@users.noreply.github.com>
92 lines
3.1 KiB
Python
92 lines
3.1 KiB
Python
import sys
|
|
|
|
import numpy
|
|
|
|
import pkg_resources
|
|
from transformers.testing_utils import TestCasePlus
|
|
from transformers.utils.versions import require_version, require_version_core, require_version_examples
|
|
|
|
|
|
numpy_ver = numpy.__version__
|
|
python_ver = ".".join([str(x) for x in sys.version_info[:3]])
|
|
|
|
|
|
class DependencyVersionCheckTest(TestCasePlus):
|
|
def test_core(self):
|
|
# lt + different version strings
|
|
require_version_core("numpy<1000.4.5")
|
|
require_version_core("numpy<1000.4")
|
|
require_version_core("numpy<1000")
|
|
|
|
# le
|
|
require_version_core("numpy<=1000.4.5")
|
|
require_version_core(f"numpy<={numpy_ver}")
|
|
|
|
# eq
|
|
require_version_core(f"numpy=={numpy_ver}")
|
|
|
|
# ne
|
|
require_version_core("numpy!=1000.4.5")
|
|
|
|
# ge
|
|
require_version_core("numpy>=1.0")
|
|
require_version_core("numpy>=1.0.0")
|
|
require_version_core(f"numpy>={numpy_ver}")
|
|
|
|
# gt
|
|
require_version_core("numpy>1.0.0")
|
|
|
|
# requirement w/o version
|
|
require_version_core("numpy")
|
|
|
|
# unmet requirements due to version conflict
|
|
for req in ["numpy==1.0.0", "numpy>=1000.0.0", f"numpy<{numpy_ver}"]:
|
|
try:
|
|
require_version_core(req)
|
|
except pkg_resources.VersionConflict as e:
|
|
self.assertIn(f"{req} is required", str(e))
|
|
self.assertIn("but found", str(e))
|
|
|
|
# unmet requirements due to missing module
|
|
for req in ["numpipypie>1", "numpipypie2"]:
|
|
try:
|
|
require_version_core(req)
|
|
except pkg_resources.DistributionNotFound as 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))
|
|
|
|
# bogus requirements formats:
|
|
# 1. whole thing
|
|
for req in ["numpy??1.0.0", "numpy1.0.0"]:
|
|
try:
|
|
require_version_core(req)
|
|
except ValueError as e:
|
|
self.assertIn("requirement needs to be in the pip package format", str(e))
|
|
# 2. only operators
|
|
for req in ["numpy=1.0.0", "numpy == 1.00", "numpy<>1.0.0", "numpy><1.00", "numpy>>1.0.0"]:
|
|
try:
|
|
require_version_core(req)
|
|
except ValueError as e:
|
|
self.assertIn("need one of ", str(e))
|
|
|
|
def test_examples(self):
|
|
# the main functionality is tested in `test_core`, this is just the hint check
|
|
try:
|
|
require_version_examples("numpy>1000.4.5")
|
|
except pkg_resources.VersionConflict as e:
|
|
self.assertIn("is required", str(e))
|
|
self.assertIn("pip install -r examples/requirements.txt", str(e))
|
|
|
|
def test_python(self):
|
|
|
|
# matching requirement
|
|
require_version("python>=3.6.0")
|
|
|
|
# not matching requirements
|
|
for req in ["python>9.9.9", "python<3.0.0"]:
|
|
try:
|
|
require_version_core(req)
|
|
except pkg_resources.VersionConflict as e:
|
|
self.assertIn(f"{req} is required", str(e))
|
|
self.assertIn(f"but found python=={python_ver}", str(e))
|