From 0f4cae4d3f4a98151fd9c002b256a6d610629e98 Mon Sep 17 00:00:00 2001 From: Ma Zerun Date: Tue, 27 Jul 2021 05:58:04 -0400 Subject: [PATCH] [Feature] Support mim (#376) * Support mim extention * Fix lint. * Remove extra `demo` setting in mim related files. --- .gitignore | 1 + MANIFEST.in | 6 +-- README.md | 1 + README_zh-CN.md | 1 + setup.py | 107 ++++++++++++++++++++++++++++++++++++------------ 5 files changed, 87 insertions(+), 29 deletions(-) diff --git a/.gitignore b/.gitignore index fb6da360..b277f11c 100644 --- a/.gitignore +++ b/.gitignore @@ -112,6 +112,7 @@ data *.pkl.json *.log.json work_dirs/ +mmcls/.mim # Pytorch *.pth diff --git a/MANIFEST.in b/MANIFEST.in index e39ef33b..c4ce6d7f 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -1,3 +1,3 @@ -include mmcls/model-index.yml -recursive-include mmcls/configs *.py *.yml -recursive-include mmcls/tools *.sh *.py +include mmcls/.mim/model-index.yml +recursive-include mmcls/.mim/configs *.py *.yml +recursive-include mmcls/.mim/tools *.py *.sh diff --git a/README.md b/README.md index 4807a1e6..87db1e16 100644 --- a/README.md +++ b/README.md @@ -85,6 +85,7 @@ We wish that the toolbox and benchmark could serve the growing research communit ## Projects in OpenMMLab - [MMCV](https://github.com/open-mmlab/mmcv): OpenMMLab foundational library for computer vision. +- [MIM](https://github.com/open-mmlab/mim): MIM Installs OpenMMLab Packages. - [MMClassification](https://github.com/open-mmlab/mmclassification): OpenMMLab image classification toolbox and benchmark. - [MMDetection](https://github.com/open-mmlab/mmdetection): OpenMMLab detection toolbox and benchmark. - [MMDetection3D](https://github.com/open-mmlab/mmdetection3d): OpenMMLab's next-generation platform for general 3D object detection. diff --git a/README_zh-CN.md b/README_zh-CN.md index 82f03995..79708373 100644 --- a/README_zh-CN.md +++ b/README_zh-CN.md @@ -72,6 +72,7 @@ MMClassification 是一款由不同学校和公司共同贡献的开源项目。 ## OpenMMLab 的其他项目 - [MMCV](https://github.com/open-mmlab/mmcv): OpenMMLab 计算机视觉基础库 +- [MIM](https://github.com/open-mmlab/mim): MIM 是 OpenMMlab 项目、算法、模型的统一入口 - [MMDetection](https://github.com/open-mmlab/mmdetection): OpenMMLab 检测工具箱与测试基准 - [MMDetection3D](https://github.com/open-mmlab/mmdetection3d): OpenMMLab 新一代通用 3D 目标检测平台 - [MMSegmentation](https://github.com/open-mmlab/mmsegmentation): OpenMMLab 语义分割工具箱与测试基准 diff --git a/setup.py b/setup.py index 2536acb1..340996e8 100644 --- a/setup.py +++ b/setup.py @@ -1,3 +1,8 @@ +import os +import os.path as osp +import shutil +import sys +import warnings from setuptools import find_packages, setup @@ -90,29 +95,79 @@ def parse_requirements(fname='requirements.txt', with_version=True): return packages -setup( - name='mmcls', - version=get_version(), - description='OpenMMLab Image Classification Toolbox and Benchmark', - long_description=readme(), - long_description_content_type='text/markdown', - author='OpenMMLab', - author_email='openmmlab@gmail.com', - keywords='computer vision, image classification', - url='https://github.com/open-mmlab/mmclassification', - packages=find_packages(exclude=('configs', 'tools', 'demo')), - include_package_data=True, - classifiers=[ - 'Development Status :: 4 - Beta', - 'License :: OSI Approved :: Apache Software License', - 'Operating System :: OS Independent', - 'Programming Language :: Python :: 3', - 'Programming Language :: Python :: 3.5', - 'Programming Language :: Python :: 3.6', - 'Programming Language :: Python :: 3.7', - 'Programming Language :: Python :: 3.8', - ], - license='Apache License 2.0', - tests_require=parse_requirements('requirements/tests.txt'), - install_requires=parse_requirements('requirements/runtime.txt'), - zip_safe=False) +def add_mim_extention(): + """Add extra files that are required to support MIM into the package. + + These files will be added by creating a symlink to the originals if the + package is installed in `editable` mode (e.g. pip install -e .), or by + copying from the originals otherwise. + """ + + # parse installment mode + if 'develop' in sys.argv: + # installed by `pip install -e .` + mode = 'symlink' + elif 'sdist' in sys.argv or 'bdist_wheel' in sys.argv: + # installed by `pip install .` + # or create source distribution by `python setup.py sdist` + mode = 'copy' + else: + return + + filenames = ['tools', 'configs', 'model-index.yml'] + repo_path = osp.dirname(__file__) + mim_path = osp.join(repo_path, 'mmcls', '.mim') + os.makedirs(mim_path, exist_ok=True) + + for filename in filenames: + if osp.exists(filename): + src_path = osp.join(repo_path, filename) + tar_path = osp.join(mim_path, filename) + + if osp.isfile(tar_path) or osp.islink(tar_path): + os.remove(tar_path) + elif osp.isdir(tar_path): + shutil.rmtree(tar_path) + + if mode == 'symlink': + src_relpath = osp.relpath(src_path, osp.dirname(tar_path)) + os.symlink(src_relpath, tar_path) + elif mode == 'copy': + if osp.isfile(src_path): + shutil.copyfile(src_path, tar_path) + elif osp.isdir(src_path): + shutil.copytree(src_path, tar_path) + else: + warnings.warn(f'Cannot copy file {src_path}.') + else: + raise ValueError(f'Invalid mode {mode}') + + +if __name__ == '__main__': + add_mim_extention() + setup( + name='mmcls', + version=get_version(), + description='OpenMMLab Image Classification Toolbox and Benchmark', + long_description=readme(), + long_description_content_type='text/markdown', + author='OpenMMLab', + author_email='openmmlab@gmail.com', + keywords='computer vision, image classification', + url='https://github.com/open-mmlab/mmclassification', + packages=find_packages(exclude=('configs', 'tools', 'demo')), + include_package_data=True, + classifiers=[ + 'Development Status :: 4 - Beta', + 'License :: OSI Approved :: Apache Software License', + 'Operating System :: OS Independent', + 'Programming Language :: Python :: 3', + 'Programming Language :: Python :: 3.5', + 'Programming Language :: Python :: 3.6', + 'Programming Language :: Python :: 3.7', + 'Programming Language :: Python :: 3.8', + ], + license='Apache License 2.0', + tests_require=parse_requirements('requirements/tests.txt'), + install_requires=parse_requirements('requirements/runtime.txt'), + zip_safe=False)