diff --git a/detect.py b/detect.py
index 57bd6eea9..92fcd064d 100644
--- a/detect.py
+++ b/detect.py
@@ -16,7 +16,9 @@ import torch
 import torch.backends.cudnn as cudnn
 
 FILE = Path(__file__).resolve()
-sys.path.append(FILE.parents[0].as_posix())  # add yolov5/ to path
+ROOT = FILE.parents[0]  # YOLOv5 root directory
+if str(ROOT) not in sys.path:
+    sys.path.append(str(ROOT))  # add ROOT to PATH
 
 from models.experimental import attempt_load
 from utils.datasets import LoadImages, LoadStreams
@@ -284,7 +286,7 @@ def parse_opt():
 
 
 def main(opt):
-    check_requirements(exclude=('tensorboard', 'thop'))
+    check_requirements(requirements=ROOT / 'requirements.txt', exclude=('tensorboard', 'thop'))
     run(**vars(opt))
 
 
diff --git a/export.py b/export.py
index 9d7576bf3..e876af234 100644
--- a/export.py
+++ b/export.py
@@ -32,7 +32,7 @@ import torch.nn as nn
 from torch.utils.mobile_optimizer import optimize_for_mobile
 
 FILE = Path(__file__).resolve()
-ROOT = FILE.parents[0]  # yolov5/ dir
+ROOT = FILE.parents[0]  # YOLOv5 root directory
 if str(ROOT) not in sys.path:
     sys.path.append(str(ROOT))  # add ROOT to PATH
 
diff --git a/models/tf.py b/models/tf.py
index 5b918ee3c..3265b7b75 100644
--- a/models/tf.py
+++ b/models/tf.py
@@ -17,8 +17,9 @@ from copy import deepcopy
 from pathlib import Path
 
 FILE = Path(__file__).resolve()
-ROOT = FILE.parents[1]  # yolov5/ dir
-sys.path.append(ROOT.as_posix())  # add yolov5/ to path
+ROOT = FILE.parents[1]  # YOLOv5 root directory
+if str(ROOT) not in sys.path:
+    sys.path.append(str(ROOT))  # add ROOT to PATH
 
 import numpy as np
 import tensorflow as tf
diff --git a/models/yolo.py b/models/yolo.py
index 0a27b24de..a7590c578 100644
--- a/models/yolo.py
+++ b/models/yolo.py
@@ -12,7 +12,9 @@ from copy import deepcopy
 from pathlib import Path
 
 FILE = Path(__file__).resolve()
-sys.path.append(FILE.parents[1].as_posix())  # add yolov5/ to path
+ROOT = FILE.parents[1]  # YOLOv5 root directory
+if str(ROOT) not in sys.path:
+    sys.path.append(str(ROOT))  # add ROOT to PATH
 
 from models.common import *
 from models.experimental import *
diff --git a/train.py b/train.py
index 281a3c0ba..89c0c507b 100644
--- a/train.py
+++ b/train.py
@@ -27,7 +27,9 @@ from torch.optim import Adam, SGD, lr_scheduler
 from tqdm import tqdm
 
 FILE = Path(__file__).resolve()
-sys.path.append(FILE.parents[0].as_posix())  # add yolov5/ to path
+ROOT = FILE.parents[0]  # YOLOv5 root directory
+if str(ROOT) not in sys.path:
+    sys.path.append(str(ROOT))  # add ROOT to PATH
 
 import val  # for end-of-epoch mAP
 from models.experimental import attempt_load
@@ -470,10 +472,11 @@ def parse_opt(known=False):
 
 def main(opt, callbacks=Callbacks()):
     # Checks
+    set_logging(RANK)
     if RANK in [-1, 0]:
         print_args(FILE.stem, opt)
         check_git_status()
-        check_requirements(requirements=FILE.parent / 'requirements.txt', exclude=['thop'])
+        check_requirements(requirements=ROOT / 'requirements.txt', exclude=['thop'])
 
     # Resume
     if opt.resume and not check_wandb_resume(opt) and not opt.evolve:  # resume an interrupted run
diff --git a/utils/__init__.py b/utils/__init__.py
index 74260ad1e..e69de29bb 100644
--- a/utils/__init__.py
+++ b/utils/__init__.py
@@ -1,19 +0,0 @@
-# import sys
-# from pathlib import Path
-#
-# import torch
-# from PIL import ImageFont
-#
-# FILE = Path(__file__).resolve()
-# ROOT = FILE.parents[1]  # yolov5/ dir
-# if str(ROOT) not in sys.path:
-#     sys.path.append(str(ROOT))  # add ROOT to PATH
-#
-# # Check YOLOv5 Annotator font
-# font = 'Arial.ttf'
-# try:
-#     ImageFont.truetype(font)
-# except Exception as e:  # download if missing
-#     url = "https://ultralytics.com/assets/" + font
-#     print(f'Downloading {url} to {ROOT / font}...')
-#     torch.hub.download_url_to_file(url, str(ROOT / font))
diff --git a/utils/aws/resume.py b/utils/aws/resume.py
index e869834e9..e1a8bd896 100644
--- a/utils/aws/resume.py
+++ b/utils/aws/resume.py
@@ -8,7 +8,10 @@ from pathlib import Path
 import torch
 import yaml
 
-sys.path.append('./')  # to run '$ python *.py' files in subdirectories
+FILE = Path(__file__).resolve()
+ROOT = FILE.parents[2]  # YOLOv5 root directory
+if str(ROOT) not in sys.path:
+    sys.path.append(str(ROOT))  # add ROOT to PATH
 
 port = 0  # --master_port
 path = Path('').resolve()
diff --git a/utils/loggers/wandb/sweep.py b/utils/loggers/wandb/sweep.py
index 4d5df5c8e..fdabec4eb 100644
--- a/utils/loggers/wandb/sweep.py
+++ b/utils/loggers/wandb/sweep.py
@@ -4,7 +4,9 @@ from pathlib import Path
 import wandb
 
 FILE = Path(__file__).resolve()
-sys.path.append(FILE.parents[3].as_posix())  # add utils/ to path
+ROOT = FILE.parents[3]  # YOLOv5 root directory
+if str(ROOT) not in sys.path:
+    sys.path.append(str(ROOT))  # add ROOT to PATH
 
 from train import train, parse_opt
 from utils.general import increment_path
diff --git a/utils/loggers/wandb/wandb_utils.py b/utils/loggers/wandb/wandb_utils.py
index e7b0d8221..ab2c20d52 100644
--- a/utils/loggers/wandb/wandb_utils.py
+++ b/utils/loggers/wandb/wandb_utils.py
@@ -11,7 +11,9 @@ import yaml
 from tqdm import tqdm
 
 FILE = Path(__file__).resolve()
-sys.path.append(FILE.parents[3].as_posix())  # add yolov5/ to path
+ROOT = FILE.parents[3]  # YOLOv5 root directory
+if str(ROOT) not in sys.path:
+    sys.path.append(str(ROOT))  # add ROOT to PATH
 
 from utils.datasets import LoadImagesAndLabels
 from utils.datasets import img2label_paths
diff --git a/val.py b/val.py
index 3574fb085..2dbf570f1 100644
--- a/val.py
+++ b/val.py
@@ -18,7 +18,9 @@ import torch
 from tqdm import tqdm
 
 FILE = Path(__file__).resolve()
-sys.path.append(FILE.parents[0].as_posix())  # add yolov5/ to path
+ROOT = FILE.parents[0]  # YOLOv5 root directory
+if str(ROOT) not in sys.path:
+    sys.path.append(str(ROOT))  # add ROOT to PATH
 
 from models.experimental import attempt_load
 from utils.datasets import create_dataloader
@@ -325,7 +327,7 @@ def parse_opt():
 
 def main(opt):
     set_logging()
-    check_requirements(requirements=FILE.parent / 'requirements.txt', exclude=('tensorboard', 'thop'))
+    check_requirements(requirements=ROOT / 'requirements.txt', exclude=('tensorboard', 'thop'))
 
     if opt.task in ('train', 'val', 'test'):  # run normally
         run(**vars(opt))