Skip to content
Snippets Groups Projects
setup.py 3.61 KiB
Newer Older
#!/usr/bin/env python
#
# setup.py - setuptools configuration for installing the fslpy package.
#
# Author: Paul McCarthy <pauldmccarthy@gmail.com>
#


from __future__ import print_function

Paul McCarthy's avatar
Paul McCarthy committed
import os.path as op
import            shutil
Paul McCarthy's avatar
Paul McCarthy committed
from setuptools import setup
from setuptools import find_packages
from setuptools import Command


# The directory in which this setup.py file is contained.
basedir = op.dirname(__file__)

# Dependencies are listed in requirements.txt
with open(op.join(basedir, 'requirements.txt'), 'rt') as f:
Paul McCarthy's avatar
Paul McCarthy committed
    install_requires = [l.strip() for l in f.readlines()]
# Optional dependencies are listed in requirements-extra.txt
with open(op.join(basedir, 'requirements-extra.txt'), 'rt') as f:
Paul McCarthy's avatar
Paul McCarthy committed
    extra_requires = {'extras' : [l.strip() for l in f.readlines()]}
packages = find_packages(
    exclude=('doc', 'tests', 'dist', 'build', 'fslpy.egg-info'))

# Figure out the current fslpy version, as defined in fsl/version.py. We
# don't want to import the fsl package,  as this may cause build problems.
# So we manually parse the contents of fsl/version.py to extract the
# version number.
version = {}
with open(op.join(basedir, "fsl", "version.py")) as f:
    for line in f:
        if line.startswith('__version__'):
            exec(line, version)
version = version['__version__']
with open(op.join(basedir, 'README.rst'), 'rt') as f:
Paul McCarthy's avatar
Paul McCarthy committed
    readme = f.read()

class doc(Command):
    """Build the API documentation. """
    def initialize_options(self):
        pass

    def finalize_options(self):
        pass

    def run(self):

        docdir  = op.join(basedir, 'doc')
        destdir = op.join(docdir, 'html')

        if op.exists(destdir):
            shutil.rmtree(destdir)

        print('Building documentation [{}]'.format(destdir))
        import sphinx
        try:
            import unittest.mock as mock
        except:
            import mock
        mockobj       = mock.MagicMock()
Paul McCarthy's avatar
Paul McCarthy committed
        mockobj.__version__ = '2.2.0'
        mockedModules = open(op.join(docdir, 'mock_modules.txt')).readlines()
        mockedModules = [l.strip()   for l in mockedModules]
        mockedModules = {m : mockobj for m in mockedModules}

        patches = [mock.patch.dict('sys.modules', **mockedModules)]
Paul McCarthy's avatar
Paul McCarthy committed
        [p.start() for p in patches]
        sphinx.main(['sphinx-build', docdir, destdir])
        [p.stop() for p in patches]
    name='fslpy',
    version=version,
Paul McCarthy's avatar
Paul McCarthy committed
    description='FSL Python library',
Paul McCarthy's avatar
Paul McCarthy committed
    long_description=readme,
    url='https://git.fmrib.ox.ac.uk/fsl/fslpy',
    author='Paul McCarthy',
    author_email='pauldmccarthy@gmail.com',
Paul McCarthy's avatar
Paul McCarthy committed
    license='Apache License Version 2.0',

    classifiers=[
        'Development Status :: 3 - Alpha',
        'Intended Audience :: Developers',
Paul McCarthy's avatar
Paul McCarthy committed
        'License :: OSI Approved :: Apache Software License',
        'Programming Language :: Python :: 3.5',
        'Programming Language :: Python :: 3.6',
        'Programming Language :: Python :: 3.7',
        'Topic :: Software Development :: Libraries :: Python Modules'],

    install_requires=install_requires,
    extras_require=extra_requires,
    package_data={'fsl': ['utils/filetree/trees/*']},
    test_suite='tests',
    cmdclass={'doc' : doc},

    entry_points={
        'console_scripts' : [
            'immv          = fsl.scripts.immv:main',
            'imcp          = fsl.scripts.imcp:main',
            'imglob        = fsl.scripts.imglob:main',
            'atlasq        = fsl.scripts.atlasq:main',
            'atlasquery    = fsl.scripts.atlasq:atlasquery_emulation',
            'fsl_ents = fsl.scripts.fsl_ents:main',