diff --git a/setup.py b/setup.py index efa5f8db..396d8429 100644 --- a/setup.py +++ b/setup.py @@ -1,6 +1,6 @@ #! /usr/bin/env python -descr = """Image Processing SciKit +descr = """Image Processing SciKit Image processing algorithms for SciPy, including IO, morphology, filtering, warping, color manipulation, object detection, etc. @@ -18,8 +18,16 @@ URL = 'http://scikits-image.org' LICENSE = 'Modified BSD' DOWNLOAD_URL = 'http://github.com/scikits-image/scikits-image' VERSION = '0.7dev' +PYTHON_VERSION = (2, 5) +DEPENDENCIES = { + 'numpy': (1, 6), + 'scipy': (0, 10), + 'Cython': (0, 15), + } + import os +import sys import setuptools from numpy.distutils.core import setup try: @@ -27,6 +35,7 @@ try: except ImportError: from distutils.command.build_py import build_py + def configuration(parent_package='', top_path=None): if os.path.exists('MANIFEST'): os.remove('MANIFEST') @@ -44,6 +53,7 @@ def configuration(parent_package='', top_path=None): return config + def write_version_py(filename='skimage/version.py'): template = """# THIS FILE IS GENERATED FROM THE SKIMAGE SETUP.PY version='%s' @@ -57,7 +67,46 @@ version='%s' finally: vfile.close() + +def get_package_version(package): + version = [] + for version_attr in ('version', 'VERSION', '__version__'): + if hasattr(package, version_attr) \ + and isinstance(getattr(package, version_attr), str): + version_info = getattr(package, version_attr) + for part in version_info.split('.'): + try: + version.append(int(part)) + except ValueError: + pass + return tuple(version) + + +def check_requirements(): + if sys.version_info < PYTHON_VERSION: + raise SystemExit('You need Python version %d.%d or later.' \ + % PYTHON_VERSION) + + for package_name, min_version in DEPENDENCIES.items(): + dep_error = False + try: + package = __import__(package_name) + except ImportError: + dep_error = True + else: + package_version = get_package_version(package) + if min_version > package_version: + dep_error = True + + if dep_error: + raise ImportError('You need `%s` version %d.%d or later.' \ + % ((package_name, ) + min_version)) + + if __name__ == "__main__": + + check_requirements() + write_version_py() setup( @@ -71,32 +120,31 @@ if __name__ == "__main__": download_url=DOWNLOAD_URL, version=VERSION, - classifiers = - [ 'Development Status :: 4 - Beta', - 'Environment :: Console', - 'Intended Audience :: Developers', - 'Intended Audience :: Science/Research', - 'License :: OSI Approved :: BSD License', - 'Programming Language :: C', - 'Programming Language :: Python', - 'Programming Language :: Python :: 3', - 'Topic :: Scientific/Engineering', - 'Operating System :: Microsoft :: Windows', - 'Operating System :: POSIX', - 'Operating System :: Unix', - 'Operating System :: MacOS', - ], + classifiers=[ + 'Development Status :: 4 - Beta', + 'Environment :: Console', + 'Intended Audience :: Developers', + 'Intended Audience :: Science/Research', + 'License :: OSI Approved :: BSD License', + 'Programming Language :: C', + 'Programming Language :: Python', + 'Programming Language :: Python :: 3', + 'Topic :: Scientific/Engineering', + 'Operating System :: Microsoft :: Windows', + 'Operating System :: POSIX', + 'Operating System :: Unix', + 'Operating System :: MacOS', + ], configuration=configuration, - install_requires=[], + packages=setuptools.find_packages(), include_package_data=True, zip_safe=False, # the package can run out of an .egg file entry_points={ - 'console_scripts': [ - 'skivi = skimage.scripts.skivi:main'] - }, + 'console_scripts': ['skivi = skimage.scripts.skivi:main'], + }, cmdclass={'build_py': build_py}, - ) + )