#!/usr/bin/env python # Copyright (c) Megvii, Inc. and its affiliates. All Rights Reserved import re import setuptools import sys TORCH_AVAILABLE = True try: import torch from torch.utils import cpp_extension except ImportError: TORCH_AVAILABLE = False print("[WARNING] Unable to import torch, pre-compiling ops will be disabled.") def get_package_dir(): pkg_dir = { "yolox.tools": "tools", "yolox.exp.default": "exps/default", } return pkg_dir def get_install_requirements(): with open("requirements.txt", "r", encoding="utf-8") as f: reqs = [x.strip() for x in f.read().splitlines()] reqs = [x for x in reqs if not x.startswith("#")] return reqs def get_yolox_version(): with open("yolox/__init__.py", "r") as f: version = re.search( r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', f.read(), re.MULTILINE ).group(1) return version def get_long_description(): with open("README.md", "r", encoding="utf-8") as f: long_description = f.read() return long_description def get_ext_modules(): ext_module = [] if sys.platform != "win32": # pre-compile ops on linux assert TORCH_AVAILABLE, "torch is required for pre-compiling ops, please install it first." # if any other op is added, please also add it here from yolox.layers import FastCOCOEvalOp ext_module.append(FastCOCOEvalOp().build_op()) return ext_module def get_cmd_class(): cmdclass = {} if TORCH_AVAILABLE: cmdclass["build_ext"] = cpp_extension.BuildExtension return cmdclass setuptools.setup( name="yolox", version=get_yolox_version(), author="megvii basedet team", url="https://github.com/Megvii-BaseDetection/YOLOX", package_dir=get_package_dir(), packages=setuptools.find_packages(exclude=("tests", "tools")) + list(get_package_dir().keys()), python_requires=">=3.6", install_requires=get_install_requirements(), setup_requires=["wheel"], # avoid building error when pip is not updated long_description=get_long_description(), long_description_content_type="text/markdown", include_package_data=True, # include files in MANIFEST.in ext_modules=get_ext_modules(), cmdclass=get_cmd_class(), classifiers=[ "Programming Language :: Python :: 3", "Operating System :: OS Independent", "License :: OSI Approved :: Apache Software License", ], project_urls={ "Documentation": "https://yolox.readthedocs.io", "Source": "https://github.com/Megvii-BaseDetection/YOLOX", "Tracker": "https://github.com/Megvii-BaseDetection/YOLOX/issues", }, )