mirror of
https://github.com/rasbt/LLMs-from-scratch.git
synced 2025-09-26 00:24:36 +00:00
Update dependency checker (#218)
* update environment checker * update requirements.txt
This commit is contained in:
parent
e2f0d936f8
commit
fde5bea1d9
@ -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
|
||||||
|
@ -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()
|
||||||
|
Loading…
x
Reference in New Issue
Block a user