Skip to content

Commit

Permalink
Enhanced check_requirements() with auto-install (ultralytics#2575)
Browse files Browse the repository at this point in the history
* Update check_requirements() with auto-install

This PR builds on an idea I had to automatically install missing dependencies rather than simply report an error message. 

YOLOv5 should now 1) display all dependency issues and not simply display the first missing dependency, and 2) attempt to install/update each missing/VersionConflict package.

* cleanup

* cleanup 2

* Check requirements.txt file exists

* cleanup 3
  • Loading branch information
glenn-jocher committed Mar 24, 2021
1 parent 89fa152 commit 3e3a18a
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions utils/general.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
# General utils
# YOLOv5 general utils

import glob
import logging
Expand Down Expand Up @@ -86,10 +86,20 @@ def check_git_status():

def check_requirements(file='requirements.txt', exclude=()):
# Check installed dependencies meet requirements
import pkg_resources
requirements = [f'{x.name}{x.specifier}' for x in pkg_resources.parse_requirements(Path(file).open())
if x.name not in exclude]
pkg_resources.require(requirements) # DistributionNotFound or VersionConflict exception if requirements not met
import pkg_resources as pkg
prefix = colorstr('red', 'bold', 'requirements:')
file = Path(file)
if not file.exists():
print(f"{prefix} {file.resolve()} not found, check failed.")
return

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...")
print(subprocess.check_output(f"pip install '{e.req}'", shell=True).decode())


def check_img_size(img_size, s=32):
Expand Down

0 comments on commit 3e3a18a

Please sign in to comment.