mirror of
https://github.com/alibaba/EasyCV.git
synced 2025-06-03 14:49:00 +08:00
1. Use original config as startup script. (For details, see refactor config parsing method #225) 2. Refactor the splicing rules of the check_base_cfg_path function in the EasyCV/easycv/utils/config_tools.py 3. Support three ways to pass class_list parameter. 4. Fix the bug that clsevalutor may make mistakes when evaluating top5. 5. Fix the bug that the distributed export cannot export the model. 6. Fix the bug that the load pretrained model key does not match. 7. support cls data source itag.
197 lines
6.4 KiB
Python
197 lines
6.4 KiB
Python
# Copyright (c) Alibaba, Inc. and its affiliates.
|
|
# !/usr/bin/env python
|
|
import os
|
|
import shutil
|
|
import subprocess
|
|
from setuptools import find_packages, setup
|
|
|
|
|
|
def readme():
|
|
with open('README.md', encoding='utf-8') as f:
|
|
content = f.read()
|
|
return content
|
|
|
|
|
|
MAJOR = 0
|
|
MINOR = 1
|
|
PATCH = 0
|
|
SUFFIX = ''
|
|
if PATCH != '':
|
|
SHORT_VERSION = '{}.{}.{}{}'.format(MAJOR, MINOR, PATCH, SUFFIX)
|
|
else:
|
|
SHORT_VERSION = '{}.{}{}'.format(MAJOR, MINOR, SUFFIX)
|
|
|
|
version_file = 'easycv/version.py'
|
|
|
|
|
|
def get_git_hash():
|
|
|
|
def _minimal_ext_cmd(cmd):
|
|
# construct minimal environment
|
|
env = {}
|
|
for k in ['SYSTEMROOT', 'PATH', 'HOME']:
|
|
v = os.environ.get(k)
|
|
if v is not None:
|
|
env[k] = v
|
|
# LANGUAGE is used on win32
|
|
env['LANGUAGE'] = 'C'
|
|
env['LANG'] = 'C'
|
|
env['LC_ALL'] = 'C'
|
|
out = subprocess.Popen(
|
|
cmd, stdout=subprocess.PIPE, env=env).communicate()[0]
|
|
return out
|
|
|
|
try:
|
|
out = _minimal_ext_cmd(['git', 'rev-parse', 'HEAD'])
|
|
sha = out.strip().decode('ascii')
|
|
except OSError:
|
|
sha = 'unknown'
|
|
|
|
return sha
|
|
|
|
|
|
def get_hash():
|
|
assert os.path.exists('.git'), '.git directory does not exist'
|
|
sha = get_git_hash()[:7]
|
|
return sha
|
|
|
|
|
|
def get_version():
|
|
with open(version_file, 'r') as f:
|
|
exec(compile(f.read(), version_file, 'exec'))
|
|
return locals()['__version__']
|
|
|
|
|
|
def parse_requirements(fname='requirements.txt', with_version=True):
|
|
"""
|
|
Parse the package dependencies listed in a requirements file but strips
|
|
specific versioning information.
|
|
|
|
Args:
|
|
fname (str): path to requirements file
|
|
with_version (bool, default=False): if True include version specs
|
|
|
|
Returns:
|
|
List[str]: list of requirements items
|
|
|
|
CommandLine:
|
|
python -c "import setup; print(setup.parse_requirements())"
|
|
"""
|
|
import sys
|
|
from os.path import exists
|
|
import re
|
|
require_fpath = fname
|
|
|
|
def parse_line(line):
|
|
"""
|
|
Parse information from a line in a requirements text file
|
|
"""
|
|
if line.startswith('-r '):
|
|
# Allow specifying requirements in other files
|
|
target = line.split(' ')[1]
|
|
for info in parse_require_file(target):
|
|
yield info
|
|
else:
|
|
info = {'line': line}
|
|
if line.startswith('-e '):
|
|
info['package'] = line.split('#egg=')[1]
|
|
else:
|
|
# Remove versioning from the package
|
|
pat = '(' + '|'.join(['>=', '==', '>']) + ')'
|
|
parts = re.split(pat, line, maxsplit=1)
|
|
parts = [p.strip() for p in parts]
|
|
|
|
info['package'] = parts[0]
|
|
if len(parts) > 1:
|
|
op, rest = parts[1:]
|
|
if ';' in rest:
|
|
# Handle platform specific dependencies
|
|
# http://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies
|
|
version, platform_deps = map(str.strip,
|
|
rest.split(';'))
|
|
info['platform_deps'] = platform_deps
|
|
else:
|
|
version = rest # NOQA
|
|
info['version'] = (op, version)
|
|
yield info
|
|
|
|
def parse_require_file(fpath):
|
|
with open(fpath, 'r') as f:
|
|
for line in f.readlines():
|
|
line = line.strip()
|
|
if line.startswith('http'):
|
|
print('skip http requirements %s' % line)
|
|
continue
|
|
if line and not line.startswith('#'):
|
|
for info in parse_line(line):
|
|
yield info
|
|
|
|
def gen_packages_items():
|
|
if exists(require_fpath):
|
|
for info in parse_require_file(require_fpath):
|
|
parts = [info['package']]
|
|
if with_version and 'version' in info:
|
|
parts.extend(info['version'])
|
|
if not sys.version.startswith('3.4'):
|
|
# apparently package_deps are broken in 3.4
|
|
platform_deps = info.get('platform_deps')
|
|
if platform_deps is not None:
|
|
parts.append(';' + platform_deps)
|
|
item = ''.join(parts)
|
|
yield item
|
|
|
|
packages = list(gen_packages_items())
|
|
return packages
|
|
|
|
|
|
def pack_resource():
|
|
# pack resource such as configs and tools
|
|
root_dir = 'package/'
|
|
if os.path.isdir(root_dir):
|
|
shutil.rmtree(root_dir)
|
|
os.makedirs(root_dir)
|
|
|
|
proj_dir = root_dir + 'easycv/'
|
|
shutil.copytree('./easycv', proj_dir)
|
|
shutil.copytree('./configs', proj_dir + 'configs')
|
|
shutil.copytree('./benchmarks', proj_dir + 'benchmarks')
|
|
shutil.copytree('./tools', proj_dir + 'tools')
|
|
shutil.copytree('./resource', proj_dir + 'resource')
|
|
shutil.copytree('./requirements', 'package/requirements')
|
|
shutil.copy('./requirements.txt', 'package/requirements.txt')
|
|
shutil.copy('./MANIFEST.in', 'package/MANIFEST.in')
|
|
shutil.copy('./README.md', 'package/README.md')
|
|
|
|
|
|
if __name__ == '__main__':
|
|
# write_version_py()
|
|
pack_resource()
|
|
os.chdir('package')
|
|
install_requires = parse_requirements('requirements.txt')
|
|
setup(
|
|
name='pai-easycv',
|
|
version=get_version(),
|
|
description='An all-in-one toolkit for computer vision',
|
|
long_description=readme(),
|
|
long_description_content_type='text/markdown',
|
|
author='Alibaba PAI team',
|
|
author_email='easycv@list.alibaba-inc.com',
|
|
keywords='self-supvervised, classification, vision',
|
|
url='https://github.com/alibaba/EasyCV.git',
|
|
packages=find_packages(
|
|
exclude=('configs', 'benchmarks', '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',
|
|
],
|
|
license='Apache License 2.0',
|
|
tests_require=parse_requirements('requirements/tests.txt'),
|
|
install_requires=install_requires,
|
|
zip_safe=False)
|