#!/usr/bin/env python """NumPy: array processing for numbers, strings, records, and objects. NumPy is a general-purpose array-processing package designed to efficiently manipulate large multi-dimensional arrays of arbitrary records without sacrificing too much speed for small multi-dimensional arrays. NumPy is built on the Numeric code base and adds features introduced by numarray as well as an extended C-API and the ability to create arrays of arbitrary type which also makes NumPy suitable for interfacing with general-purpose data-base applications. There are also basic facilities for discrete fourier transform, basic linear algebra and random number generation. """ DOCLINES = __doc__.split("\n") import os import shutil import sys import re import subprocess if sys.version_info[0] < 3: import __builtin__ as builtins else: import builtins CLASSIFIERS = """\ Development Status :: 5 - Production/Stable Intended Audience :: Science/Research Intended Audience :: Developers License :: OSI Approved Programming Language :: C Programming Language :: Python Topic :: Software Development Topic :: Scientific/Engineering Operating System :: Microsoft :: Windows Operating System :: POSIX Operating System :: Unix Operating System :: MacOS """ NAME = 'numpy' MAINTAINER = "NumPy Developers" MAINTAINER_EMAIL = "numpy-discussion@scipy.org" DESCRIPTION = DOCLINES[0] LONG_DESCRIPTION = "\n".join(DOCLINES[2:]) URL = "http://numpy.scipy.org" DOWNLOAD_URL = "http://sourceforge.net/project/showfiles.php?group_id=1369&package_id=175103" LICENSE = 'BSD' CLASSIFIERS = filter(None, CLASSIFIERS.split('\n')) AUTHOR = "Travis E. Oliphant, et.al." AUTHOR_EMAIL = "oliphant@enthought.com" PLATFORMS = ["Windows", "Linux", "Solaris", "Mac OS-X", "Unix"] MAJOR = 1 MINOR = 5 MICRO = 0 ISRELEASED = True VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO) # Return the svn version as a string, raise a ValueError otherwise def svn_version(): def _minimal_ext_cmd(cmd): # construct minimal environment env = {} for k in ['SYSTEMROOT', 'PATH']: v = os.environ.get(k) if v is not None: env[k] = v # LANGUAGE is used on win32 env['LANGUAGE'] = 'C' env['LANG'] = 'C' env['LC_ALL'] = 'C' out = subprocess.Popen(cmd, stdout = subprocess.PIPE, env=env).communicate()[0] return out try: out = _minimal_ext_cmd(['svn', 'info']) except OSError: print(" --- Could not run svn info --- ") return "" r = re.compile('Revision: ([0-9]+)') svnver = "" out = out.decode() for line in out.split('\n'): m = r.match(line.strip()) if m: svnver = m.group(1) if not svnver: print("Error while parsing svn version") return svnver # BEFORE importing distutils, remove MANIFEST. distutils doesn't properly # update it when the contents of directories change. if os.path.exists('MANIFEST'): os.remove('MANIFEST') # This is a bit hackish: we are setting a global variable so that the main # numpy __init__ can detect if it is being loaded by the setup routine, to # avoid attempting to load components that aren't built yet. While ugly, it's # a lot more robust than what was previously being used. builtins.__NUMPY_SETUP__ = True FULLVERSION = VERSION if not ISRELEASED: FULLVERSION += '.dev' # If in git or something, bypass the svn rev if os.path.exists('.svn'): FULLVERSION += svn_version() def write_version_py(filename='numpy/version.py'): cnt = """ # THIS FILE IS GENERATED FROM NUMPY SETUP.PY short_version='%(version)s' version='%(version)s' release=%(isrelease)s if not release: version += '.dev' import os svn_version_file = os.path.join(os.path.dirname(__file__), 'core','__svn_version__.py') if os.path.isfile(svn_version_file): import imp svn = imp.load_module('numpy.core.__svn_version__', open(svn_version_file), svn_version_file, ('.py','U',1)) version += svn.version """ a = open(filename, 'w') try: a.write(cnt % {'version': VERSION, 'isrelease': str(ISRELEASED)}) finally: a.close() def configuration(parent_package='',top_path=None): from numpy.distutils.misc_util import Configuration config = Configuration(None, parent_package, top_path) config.set_options(ignore_setup_xxx_py=True, assume_default_configuration=True, delegate_options_to_subpackages=True, quiet=True) config.add_subpackage('numpy') config.add_data_files(('numpy','*.txt'), ('numpy','COMPATIBILITY'), ('numpy','site.cfg.example'), ('numpy/tools', 'tools/py3tool.py')) config.get_version('numpy/version.py') # sets config.version return config def setup_package(): # Rewrite the version file everytime if os.path.exists('numpy/version.py'): os.remove('numpy/version.py') write_version_py() # Perform 2to3 if needed local_path = os.path.dirname(os.path.abspath(sys.argv[0])) src_path = local_path if sys.version_info[0] == 3: src_path = os.path.join(local_path, 'build', 'py3k') sys.path.insert(0, os.path.join(local_path, 'tools')) import py3tool print("Converting to Python3 via 2to3...") py3tool.sync_2to3('numpy', os.path.join(src_path, 'numpy')) site_cfg = os.path.join(local_path, 'site.cfg') if os.path.isfile(site_cfg): shutil.copy(site_cfg, src_path) # Run build old_path = os.getcwd() os.chdir(src_path) sys.path.insert(0, src_path) from numpy.distutils.core import setup try: setup( name=NAME, maintainer=MAINTAINER, maintainer_email=MAINTAINER_EMAIL, description=DESCRIPTION, long_description=LONG_DESCRIPTION, url=URL, download_url=DOWNLOAD_URL, license=LICENSE, classifiers=CLASSIFIERS, author=AUTHOR, author_email=AUTHOR_EMAIL, platforms=PLATFORMS, configuration=configuration ) finally: del sys.path[0] os.chdir(old_path) return if __name__ == '__main__': setup_package()