CCCasEEE/internlm_lagent
0
1from pathlib import Path2from setuptools import find_packages, setup3 4 5def get_version():6 version_file = 'lagent/version.py'7 with open(version_file, encoding='utf-8') as f:8 exec(compile(f.read(), version_file, 'exec'))9 return locals()['__version__']10 11 12def parse_requirements(fname='requirements.txt', with_version=True):13 """Parse the package dependencies listed in a requirements file but strip14 specific version information.15 16 Args:17 fname (str): Path to requirements file.18 with_version (bool, default=False): If True, include version specs.19 Returns:20 info (list[str]): List of requirements items.21 CommandLine:22 python -c "import setup; print(setup.parse_requirements())"23 """24 import re25 import sys26 from os.path import exists27 28 require_fpath = fname29 30 def parse_line(line):31 """Parse information from a line in a requirements text file."""32 if line.startswith('-r '):33 # Allow specifying requirements in other files34 target = line.split(' ')[1]35 for info in parse_require_file(target):36 yield info37 else:38 info = {'line': line}39 if line.startswith('-e '):40 info['package'] = line.split('#egg=')[1]41 else:42 # Remove versioning from the package43 pat = '(' + '|'.join(['>=', '==', '>']) + ')'44 parts = re.split(pat, line, maxsplit=1)45 parts = [p.strip() for p in parts]46 47 info['package'] = parts[0]48 if len(parts) > 1:49 op, rest = parts[1:]50 if ';' in rest:51 # Handle platform specific dependencies52 # http://setuptools.readthedocs.io/en/latest/setuptools.html#declaring-platform-specific-dependencies53 version, platform_deps = map(str.strip,54 rest.split(';'))55 info['platform_deps'] = platform_deps56 else:57 version = rest # NOQA58 info['version'] = (op, version)59 yield info60 61 def parse_require_file(fpath):62 with open(fpath) as f:63 for line in f.readlines():64 line = line.strip()65 if line and not line.startswith('#'):66 yield from parse_line(line)67 68 def gen_packages_items():69 if exists(require_fpath):70 for info in parse_require_file(require_fpath):71 parts = [info['package']]72 if with_version and 'version' in info:73 parts.extend(info['version'])74 if not sys.version.startswith('3.4'):75 # apparently package_deps are broken in 3.476 platform_deps = info.get('platform_deps')77 if platform_deps is not None:78 parts.append(';' + platform_deps)79 item = ''.join(parts)80 yield item81 82 packages = list(gen_packages_items())83 return packages84 85 86if __name__ == '__main__':87 with Path(Path(__file__).parent,88 'README.md').open(encoding='utf-8') as file:89 long_description = file.read()90 91 setup(92 name='lagent',93 packages=find_packages(),94 include_package_data=True,95 version=get_version(),96 license='Apache 2.0',97 description='A lightweight framework for building LLM-based agents',98 long_description=long_description,99 long_description_content_type='text/markdown',100 data_files=[('.', ['README.md'])],101 keywords=['artificial general intelligence', 'agent', 'agi', 'llm'],102 url='https://github.com/InternLM/lagent',103 install_requires=parse_requirements('requirements/runtime.txt'),104 extras_require={105 'all': parse_requirements('requirements.txt'),106 'optional': parse_requirements('requirements/optional.txt'),107 },108 )109 