diff --git a/requirements.txt b/requirements.txt index ef0e8aee69b..b43644616d2 100644 --- a/requirements.txt +++ b/requirements.txt @@ -4,7 +4,7 @@ scipy>=1.1.0 matplotlib pyqt5>=5.10,<5.14; platform_system == "Darwin" pyqt5>=5.10,!=5.15.2,!=5.15.3; platform_system == "Linux" -pyqt5>=5.10,!=5.15.3; platform_system != "Linux" and platform_system != "Darwin" +pyqt5>=5.10,!=5.15.3; platform_system == "Windows" pyqt5-sip sip scikit-learn diff --git a/setup.py b/setup.py index b59b4595397..9f72663657b 100644 --- a/setup.py +++ b/setup.py @@ -5,9 +5,24 @@ import os import os.path as op +import re from setuptools import setup + +def parse_requirements_file(fname): + requirements = list() + with open(fname, 'r') as fid: + for line in fid: + req = line.strip() + if req.startswith('#'): + continue + # strip end-of-line comments + req = req.split('#', maxsplit=1)[0].strip() + requirements.append(req) + return requirements + + # get the version (don't import mne here, so dependencies are not needed) version = None with open(op.join('mne', '_version.py'), 'r') as fid: @@ -19,10 +34,8 @@ raise RuntimeError('Could not determine version') -descr = """MNE python project for MEG and EEG data analysis.""" - DISTNAME = 'mne' -DESCRIPTION = descr +DESCRIPTION = 'MNE-Python project for MEG and EEG data analysis.' MAINTAINER = 'Alexandre Gramfort' MAINTAINER_EMAIL = 'alexandre.gramfort@inria.fr' URL = 'https://mne.tools/dev/' @@ -49,14 +62,22 @@ def package_tree(pkgroot): long_description = fid.read() hard_dependencies = ('numpy', 'scipy') + data_dependencies = ('pooch', 'tqdm') + full_install_requires = parse_requirements_file('requirements.txt') install_requires = list() - with open('requirements.txt', 'r') as fid: - for line in fid: - req = line.strip() - for hard_dep in hard_dependencies: - if req.startswith(hard_dep): - install_requires.append(req) + data_requires = list() + for req in full_install_requires: + pkg = re.split(r'[<>=!;]', req, maxsplit=1)[0] + if pkg in hard_dependencies: + install_requires.append(req) + elif pkg in data_dependencies: + data_requires.append(req) + for req in install_requires: + full_install_requires.remove(req) + doc_requires = parse_requirements_file('requirements_doc.txt') + test_requires = (parse_requirements_file('requirements_testing.txt') + + parse_requirements_file('requirements_testing_extra.txt')) setup(name=DISTNAME, maintainer=MAINTAINER, include_package_data=True, @@ -90,6 +111,12 @@ def package_tree(pkgroot): platforms='any', python_requires='>=3.7', install_requires=install_requires, + extras_require={ + 'doc': doc_requires, + 'data': data_requires, + 'test': test_requires, + 'full': full_install_requires + }, packages=package_tree('mne'), package_data={'mne': [ op.join('data', 'eegbci_checksums.txt'),