From 333ccc5b0f66c7d0aba096e3e2d9d1912db1e610 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Wed, 24 Mar 2021 17:51:39 +0100 Subject: [PATCH] YOLOv5 PyTorch Hub models >> check_requirements() (#2592) Improved user-feedback following requirements auto-update. --- utils/general.py | 17 ++++++++++++++--- 1 file changed, 14 insertions(+), 3 deletions(-) diff --git a/utils/general.py b/utils/general.py index 50d60c519b04..284146c87e10 100755 --- a/utils/general.py +++ b/utils/general.py @@ -52,6 +52,11 @@ def isdocker(): return Path('/workspace').exists() # or Path('/.dockerenv').exists() +def emojis(str=''): + # Return platform-dependent emoji-safe version of string + return str.encode().decode('ascii', 'ignore') if platform.system() == 'Windows' else str + + def check_online(): # Check internet connectivity import socket @@ -79,7 +84,7 @@ def check_git_status(): f"Use 'git pull' to update or 'git clone {url}' to download latest." else: s = f'up to date with {url} ✅' - print(s.encode().decode('ascii', 'ignore') if platform.system() == 'Windows' else s) # emoji-safe + print(emojis(s)) # emoji-safe except Exception as e: print(e) @@ -93,14 +98,20 @@ def check_requirements(file='requirements.txt', exclude=()): print(f"{prefix} {file.resolve()} not found, check failed.") return + n = 0 # number of packages updates requirements = [f'{x.name}{x.specifier}' for x in pkg.parse_requirements(file.open()) if x.name not in exclude] for r in requirements: try: pkg.require(r) except Exception as e: # DistributionNotFound or VersionConflict if requirements not met - print(f"{prefix} {e.req} not found and is required by YOLOv5, attempting auto-install...") + n += 1 + print(f"{prefix} {e.req} not found and is required by YOLOv5, attempting auto-update...") print(subprocess.check_output(f"pip install '{e.req}'", shell=True).decode()) - print(f'Please restart runtime or rerun command for update to take effect.') + + if n: # if packages updated + s = f"{prefix} {n} package{'s' * (n > 1)} updated per {file.resolve()}\n" \ + f"{prefix} ⚠️ {colorstr('bold', 'Restart runtime or rerun command for updates to take effect')}\n" + print(emojis(s)) # emoji-safe def check_img_size(img_size, s=32):