From daf16ecf31332acad8a351578eb213b755a11ba4 Mon Sep 17 00:00:00 2001 From: Glenn Jocher Date: Fri, 15 Sep 2023 01:32:10 +0200 Subject: [PATCH] Update MANIFEST.in (#4894) Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> --- .github/workflows/publish.yml | 5 ++--- MANIFEST.in | 3 --- docs/hub/index.md | 2 +- setup.py | 34 +++++------------------------- ultralytics/engine/trainer.py | 2 +- ultralytics/trackers/README.md | 4 ---- ultralytics/utils/callbacks/dvc.py | 13 ++++-------- ultralytics/utils/checks.py | 8 ++++--- 8 files changed, 18 insertions(+), 53 deletions(-) diff --git a/.github/workflows/publish.yml b/.github/workflows/publish.yml index c6ad0cd4db..01e48775e4 100644 --- a/.github/workflows/publish.yml +++ b/.github/workflows/publish.yml @@ -38,12 +38,11 @@ jobs: shell: python run: | import os - import pkg_resources as pkg import ultralytics from ultralytics.utils.checks import check_latest_pypi_version - v_local = pkg.parse_version(ultralytics.__version__).release - v_pypi = pkg.parse_version(check_latest_pypi_version()).release + v_local = tuple(map(int, ultralytics.__version__.split('.'))) + v_pypi = tuple(map(int, check_latest_pypi_version().split('.'))) print(f'Local version is {v_local}') print(f'PyPI version is {v_pypi}') d = [a - b for a, b in zip(v_local, v_pypi)] # diff diff --git a/MANIFEST.in b/MANIFEST.in index def1ad3c3a..7414eb0c0a 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -2,7 +2,4 @@ include *.md include requirements.txt include LICENSE include setup.py -include ultralytics/assets/bus.jpg -include ultralytics/assets/zidane.jpg -recursive-include ultralytics *.yaml recursive-exclude __pycache__ * diff --git a/docs/hub/index.md b/docs/hub/index.md index eb88de34b0..3fbdc63221 100644 --- a/docs/hub/index.md +++ b/docs/hub/index.md @@ -1,6 +1,6 @@ --- comments: true -description: Gain seamless experience in training and deploying your YOLOv5 and YOLOv8 models with Ultralytics HUB. Explore pre-trained models, templates and various integrations. +description: Gain insights into training and deploying your YOLOv5 and YOLOv8 models with Ultralytics HUB. Explore pre-trained models, templates and various integrations. keywords: Ultralytics HUB, YOLOv5, YOLOv8, model training, model deployment, pretrained models, model integrations --- diff --git a/setup.py b/setup.py index f22176449b..fe6b8b13b1 100644 --- a/setup.py +++ b/setup.py @@ -3,7 +3,7 @@ import re from pathlib import Path -from setuptools import setup +from setuptools import find_packages, setup # Settings FILE = Path(__file__).resolve() @@ -36,33 +36,6 @@ def parse_requirements(file_path: Path): return requirements -def find_packages(start_dir, exclude=()): - """ - Custom implementation of setuptools.find_packages(). Finds all Python packages in a directory. - - Args: - start_dir (str | Path, optional): The directory where the search will start. Defaults to the current directory. - exclude (list | tuple, optional): List of package names to exclude. Defaults to None. - - Returns: - List[str]: List of package names. - """ - - packages = [] - start_dir = Path(start_dir) - root_package = start_dir.name - - if '__init__.py' in [child.name for child in start_dir.iterdir()]: - packages.append(root_package) - for package in start_dir.rglob('*'): - if package.is_dir() and '__init__.py' in [child.name for child in package.iterdir()]: - package_name = f"{root_package}.{package.relative_to(start_dir).as_posix().replace('/', '.')}" - if package_name not in exclude: - packages.append(package_name) - - return packages - - setup( name='ultralytics', # name of pypi package version=get_version(), # version of pypi package @@ -79,7 +52,10 @@ setup( 'Source': 'https://github.com/ultralytics/ultralytics'}, author='Ultralytics', author_email='hello@ultralytics.com', - packages=find_packages(start_dir='ultralytics'), # required + packages=find_packages(), # required + package_data={ + '': ['*.yaml'], + 'ultralytics.assets': ['*.jpg']}, include_package_data=True, install_requires=parse_requirements(PARENT / 'requirements.txt'), extras_require={ diff --git a/ultralytics/engine/trainer.py b/ultralytics/engine/trainer.py index 9ccb3f3647..38df267394 100644 --- a/ultralytics/engine/trainer.py +++ b/ultralytics/engine/trainer.py @@ -426,7 +426,7 @@ class BaseTrainer: """Save model training checkpoints with additional metadata.""" import pandas as pd # scope for faster startup metrics = {**self.metrics, **{'fitness': self.fitness}} - results = {k.strip(): v for k, v in pd.read_csv(self.save_dir / 'results.csv').to_dict(orient='list').items()} + results = {k.strip(): v for k, v in pd.read_csv(self.csv).to_dict(orient='list').items()} ckpt = { 'epoch': self.epoch, 'best_fitness': self.best_fitness, diff --git a/ultralytics/trackers/README.md b/ultralytics/trackers/README.md index 6795cc8d36..7bbbadedf8 100644 --- a/ultralytics/trackers/README.md +++ b/ultralytics/trackers/README.md @@ -1,7 +1,3 @@ -______________________________________________________________________ - -## comments: true description: Learn how to use Ultralytics YOLO for object tracking in video streams. Guides to use different trackers and customise tracker configurations. keywords: Ultralytics, YOLO, object tracking, video streams, BoT-SORT, ByteTrack, Python guide, CLI guide - # Multi-Object Tracking with Ultralytics YOLO diff --git a/ultralytics/utils/callbacks/dvc.py b/ultralytics/utils/callbacks/dvc.py index b5bfa9de8b..c529bda4dc 100644 --- a/ultralytics/utils/callbacks/dvc.py +++ b/ultralytics/utils/callbacks/dvc.py @@ -11,15 +11,12 @@ try: import os import re - from importlib.metadata import version from pathlib import Path - import pkg_resources as pkg + from ultralytics.utils.checks import check_version - ver = version('dvclive') - if pkg.parse_version(ver) < pkg.parse_version('2.11.0'): - LOGGER.debug(f'DVCLive is detected but version {ver} is incompatible (>=2.11 required).') - dvclive = None # noqa: F811 + if not check_version(dvclive.__version__, '2.11.0', name='dvclive', verbose=True): + dvclive = None # DVCLive logger instance live = None @@ -74,9 +71,7 @@ def on_pretrain_routine_start(trainer): try: global live live = dvclive.Live(save_dvc_exp=True, cache_images=True) - LOGGER.info( - f'DVCLive is detected and auto logging is enabled (can be disabled in the {SETTINGS.file} with `dvc: false`).' - ) + LOGGER.info("DVCLive is detected and auto logging is enabled (run 'yolo settings dvc=False' to disable).") except Exception as e: LOGGER.warning(f'WARNING ⚠️ DVCLive installed but not initialized correctly, not logging this run. {e}') diff --git a/ultralytics/utils/checks.py b/ultralytics/utils/checks.py index 28cad0dc72..e3c6bc76c6 100644 --- a/ultralytics/utils/checks.py +++ b/ultralytics/utils/checks.py @@ -1,4 +1,5 @@ # Ultralytics YOLO 🚀, AGPL-3.0 license + import contextlib import glob import inspect @@ -15,7 +16,6 @@ from typing import Optional import cv2 import numpy as np import pkg_resources as pkg -import psutil import requests import torch from matplotlib import font_manager @@ -141,7 +141,7 @@ def check_version(current: str = '0.0.0', elif op == '<' and not (current < version): result = False if not result: - warning_message = f'WARNING ⚠️ {name}{required} is required, but {name}{current} is currently installed' + warning_message = f'WARNING ⚠️ {name}{op}{required} is required, but {name}=={current} is currently installed' if hard: raise ModuleNotFoundError(emojis(warning_message)) # assert version requirements met if verbose: @@ -321,7 +321,7 @@ def check_torchvision(): if v_torch in compatibility_table: compatible_versions = compatibility_table[v_torch] - if all(pkg.parse_version(v_torchvision) != pkg.parse_version(v) for v in compatible_versions): + if all(v_torchvision != v for v in compatible_versions): print(f'WARNING ⚠️ torchvision=={v_torchvision} is incompatible with torch=={v_torch}.\n' f"Run 'pip install torchvision=={compatible_versions[0]}' to fix torchvision or " "'pip install -U torch torchvision' to update both.\n" @@ -404,6 +404,8 @@ def check_imshow(warn=False): def check_yolo(verbose=True, device=''): """Return a human-readable YOLO software and hardware summary.""" + import psutil + from ultralytics.utils.torch_utils import select_device if is_jupyter():