mirror of
https://github.com/rasbt/LLMs-from-scratch.git
synced 2026-04-10 12:33:42 +00:00
Organized setup instructions (#115)
* Organized setup instructions * update tets * link checker action * raise error upon broken link * fix links * fix links * delete duplicated paragraph
This commit is contained in:
committed by
GitHub
parent
0b866c133f
commit
790d0808b2
@@ -0,0 +1,77 @@
|
||||
# Copyright (c) Sebastian Raschka under Apache License 2.0 (see LICENSE.txt).
|
||||
# Source for "Build a Large Language Model From Scratch"
|
||||
# - https://www.manning.com/books/build-a-large-language-model-from-scratch
|
||||
# Code: https://github.com/rasbt/LLMs-from-scratch
|
||||
|
||||
from importlib.metadata import PackageNotFoundError, import_module
|
||||
import importlib.metadata
|
||||
from os.path import dirname, join, realpath
|
||||
from packaging.version import parse as version_parse
|
||||
import platform
|
||||
import sys
|
||||
|
||||
if version_parse(platform.python_version()) < version_parse('3.9'):
|
||||
print('[FAIL] We recommend Python 3.9 or newer but'
|
||||
' found version %s' % (sys.version))
|
||||
else:
|
||||
print('[OK] Your Python version is %s' % (platform.python_version()))
|
||||
|
||||
|
||||
def get_packages(pkgs):
|
||||
versions = []
|
||||
for p in pkgs:
|
||||
try:
|
||||
imported = import_module(p)
|
||||
try:
|
||||
version = (getattr(imported, '__version__', None) or
|
||||
getattr(imported, 'version', None) or
|
||||
getattr(imported, 'version_info', None))
|
||||
if version is None:
|
||||
# If common attributes don't exist, use importlib.metadata
|
||||
version = importlib.metadata.version(p)
|
||||
versions.append(version)
|
||||
except PackageNotFoundError:
|
||||
# Handle case where package is not installed
|
||||
versions.append('0.0')
|
||||
except ImportError:
|
||||
# Fallback if importlib.import_module fails for unexpected reasons
|
||||
versions.append('0.0')
|
||||
return versions
|
||||
|
||||
|
||||
def get_requirements_dict():
|
||||
PROJECT_ROOT = dirname(realpath(__file__))
|
||||
PROJECT_ROOT_UP_TWO = dirname(dirname(PROJECT_ROOT))
|
||||
REQUIREMENTS_FILE = join(PROJECT_ROOT_UP_TWO, "requirements.txt")
|
||||
d = {}
|
||||
with open(REQUIREMENTS_FILE) as f:
|
||||
for line in f:
|
||||
if not line.strip():
|
||||
continue
|
||||
line = line.split("#")[0].strip()
|
||||
line = line.split(" ")
|
||||
line = [l.strip() for l in line]
|
||||
d[line[0]] = line[-1]
|
||||
return d
|
||||
|
||||
|
||||
def check_packages(d):
|
||||
versions = get_packages(d.keys())
|
||||
|
||||
for (pkg_name, suggested_ver), actual_ver in zip(d.items(), versions):
|
||||
if actual_ver == 'N/A':
|
||||
continue
|
||||
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:
|
||||
print(f'[OK] {pkg_name} {actual_ver}')
|
||||
|
||||
|
||||
def main():
|
||||
d = get_requirements_dict()
|
||||
check_packages(d)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
||||
Reference in New Issue
Block a user