Update dependency checker (#218)

* update environment checker

* update requirements.txt
This commit is contained in:
Sebastian Raschka 2024-06-17 21:09:31 -05:00 committed by GitHub
parent e2f0d936f8
commit fde5bea1d9
2 changed files with 48 additions and 26 deletions

View File

@ -1,10 +1,10 @@
torch >= 2.0.1 # all torch >= 2.0.1 # all
jupyterlab >= 4.0 # all jupyterlab >= 4.0 # all
tiktoken >= 0.5.1 # ch02, ch04, ch05 tiktoken >= 0.5.1 # ch02; ch04; ch05
matplotlib >= 3.7.1 # ch04, ch05 matplotlib >= 3.7.1 # ch04; ch05
numpy >= 1.24.3 # ch05 numpy >= 1.24.3 # ch05
tensorflow >= 2.15.0 # ch05 tensorflow >= 2.15.0 # ch05
tqdm >= 4.66.1 # ch05, ch07 tqdm >= 4.66.1 # ch05; ch07
numpy < 2.0 # dependency of several other libraries like torch and pandas numpy >= 1.25, < 2.0 # dependency of several other libraries like torch and pandas
pandas >= 2.2.1 # ch06 pandas >= 2.2.1 # ch06
psutil >= 5.9.5 # ch07, already installed automatically as dependency of torch psutil >= 5.9.5 # ch07; already installed automatically as dependency of torch

View File

@ -10,11 +10,11 @@ from packaging.version import parse as version_parse
import platform import platform
import sys import sys
if version_parse(platform.python_version()) < version_parse('3.9'): if version_parse(platform.python_version()) < version_parse("3.9"):
print('[FAIL] We recommend Python 3.9 or newer but' print("[FAIL] We recommend Python 3.9 or newer but"
' found version %s' % (sys.version)) " found version %s" % (sys.version))
else: else:
print('[OK] Your Python version is %s' % (platform.python_version())) print("[OK] Your Python version is %s" % (platform.python_version()))
def get_packages(pkgs): def get_packages(pkgs):
@ -23,19 +23,19 @@ def get_packages(pkgs):
try: try:
imported = import_module(p) imported = import_module(p)
try: try:
version = (getattr(imported, '__version__', None) or version = (getattr(imported, "__version__", None) or
getattr(imported, 'version', None) or getattr(imported, "version", None) or
getattr(imported, 'version_info', None)) getattr(imported, "version_info", None))
if version is None: if version is None:
# If common attributes don't exist, use importlib.metadata # If common attributes don"t exist, use importlib.metadata
version = importlib.metadata.version(p) version = importlib.metadata.version(p)
versions.append(version) versions.append(version)
except PackageNotFoundError: except PackageNotFoundError:
# Handle case where package is not installed # Handle case where package is not installed
versions.append('0.0') versions.append("0.0")
except ImportError: except ImportError:
# Fallback if importlib.import_module fails for unexpected reasons # Fallback if importlib.import_module fails for unexpected reasons
versions.append('0.0') versions.append("0.0")
return versions return versions
@ -48,10 +48,20 @@ def get_requirements_dict():
for line in f: for line in f:
if not line.strip(): if not line.strip():
continue continue
line = line.split("#")[0].strip() if "," in line:
line = line.split(" ") left, right = line.split(",")
line = [l.strip() for l in line] lower = right.split("#")[0].strip()
d[line[0]] = line[-1] package, _, upper = left.split(" ")
package = package.strip()
_, lower = lower.split(" ")
lower = lower.strip()
upper = upper.strip()
d[package] = (upper, lower)
else:
line = line.split("#")[0].strip()
line = line.split(" ")
line = [ln.strip() for ln in line]
d[line[0]] = line[-1]
return d return d
@ -59,13 +69,25 @@ def check_packages(d):
versions = get_packages(d.keys()) versions = get_packages(d.keys())
for (pkg_name, suggested_ver), actual_ver in zip(d.items(), versions): for (pkg_name, suggested_ver), actual_ver in zip(d.items(), versions):
if actual_ver == 'N/A': if isinstance(suggested_ver, tuple):
continue lower, upper = suggested_ver[0], suggested_ver[1]
actual_ver, suggested_ver = version_parse(actual_ver), version_parse(suggested_ver)
if actual_ver < suggested_ver:
print(f'[FAIL] {pkg_name} {actual_ver}, please upgrade to >= {suggested_ver}')
else: else:
print(f'[OK] {pkg_name} {actual_ver}') lower = suggested_ver
upper = None
if actual_ver == "N/A":
continue
actual_ver = version_parse(actual_ver)
lower = version_parse(lower)
if upper is not None:
upper = version_parse(upper)
if actual_ver < lower and upper is None:
print(f"[FAIL] {pkg_name} {actual_ver}, please upgrade to >= {lower}")
elif actual_ver < lower:
print(f"[FAIL] {pkg_name} {actual_ver}, please upgrade to >= {lower} and < {upper}")
elif upper is not None and actual_ver >= upper:
print(f"[FAIL] {pkg_name} {actual_ver}, please downgrade to >= {lower} and < {upper}")
else:
print(f"[OK] {pkg_name} {actual_ver}")
def main(): def main():
@ -73,5 +95,5 @@ def main():
check_packages(d) check_packages(d)
if __name__ == '__main__': if __name__ == "__main__":
main() main()