Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add extra dependencies to extra_require #133

Merged
merged 2 commits into from
Jun 16, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 3 additions & 0 deletions requirements.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
-r requirements/install.txt
-r requirements/docs.txt
-r requirements/tests.txt
92 changes: 81 additions & 11 deletions setup.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
import re
from setuptools import find_packages, setup # type: ignore


Expand All @@ -7,15 +8,87 @@ def readme():
return content


version_file = 'mim/version.py'


def get_version():
version_file = 'mim/version.py'
with open(version_file) as f:
exec(compile(f.read(), version_file, 'exec'))
return locals()['__version__']


def parse_requirements(fname='requirements/runtime.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())"
"""
ice-tong marked this conversation as resolved.
Show resolved Hide resolved
import sys
from os.path import exists
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) as f:
for line in f.readlines():
line = line.strip()
if line and not line.startswith('#'):
yield from parse_line(line)

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


setup(
name='openmim',
version=get_version(),
Expand All @@ -28,14 +101,11 @@ def get_version():
packages=find_packages(),
include_package_data=True,
python_requires='>=3.6',
install_requires=[
'Click',
'colorama',
'requests',
'model-index',
'pandas',
'tabulate',
],
install_requires=parse_requirements('requirements/install.txt'),
extras_require={
'all': parse_requirements('requirements.txt'),
'tests': parse_requirements('requirements/tests.txt'),
},
entry_points='''
[console_scripts]
mim=mim.cli:cli
Expand Down