blob: 3309fa0975cf6119186425de24d2407ddb86828e [file] [log] [blame]
Fernando Perez36d3c162006-07-12 06:02:281#!/usr/bin/env python
Ralf Gommers759dd952018-08-23 17:11:582""" NumPy is the fundamental package for array computing with Python.
Travis Oliphantda9c6da2006-01-04 17:31:073
Ralf Gommers759dd952018-08-23 17:11:584It provides:
Travis Oliphantda9c6da2006-01-04 17:31:075
Ralf Gommers759dd952018-08-23 17:11:586- a powerful N-dimensional array object
7- sophisticated (broadcasting) functions
8- tools for integrating C/C++ and Fortran code
9- useful linear algebra, Fourier transform, and random number capabilities
10- and much more
Charles Harris6aa264c2013-02-27 20:26:5811
Ralf Gommers759dd952018-08-23 17:11:5812Besides its obvious scientific uses, NumPy can also be used as an efficient
13multi-dimensional container of generic data. Arbitrary data-types can be
14defined. This allows NumPy to seamlessly and speedily integrate with a wide
15variety of databases.
Matthew Brettbe575d52016-03-07 20:52:0816
Ralf Gommers759dd952018-08-23 17:11:5817All NumPy wheels distributed on PyPI are BSD licensed.
Matthew Brettbe575d52016-03-07 20:52:0818
Travis Oliphantda9c6da2006-01-04 17:31:0719"""
Charles Harrisbb726ca2013-04-06 19:25:2620from __future__ import division, print_function
Travis Oliphantda9c6da2006-01-04 17:31:0721
David Sanders922442f2015-10-19 20:03:3422DOCLINES = (__doc__ or '').split("\n")
Pearu Petersonc415fd12002-11-18 22:39:3123
Pearu Petersone8fa0132003-03-07 18:08:2824import os
25import sys
David Cournapeau5623a7c2009-04-02 16:21:3026import subprocess
Ralf Gommers99e99e92015-12-29 14:24:2227import textwrap
mattip405b8022020-01-04 20:47:4728import sysconfig
Pearu Petersonc415fd12002-11-18 22:39:3129
Ralf Gommers17716d72013-12-06 19:45:4030
Charles Harrisbadf2902018-12-07 21:16:2631if sys.version_info[:2] < (3, 5):
32 raise RuntimeError("Python version >= 3.5 required.")
Charles Harris28eadc02013-07-11 18:08:4933
Charles Harrisbadf2902018-12-07 21:16:2634import builtins
David Cournapeau2b517692009-12-03 15:53:2935
Ralf Gommers17716d72013-12-06 19:45:4036
Travis Oliphantda9c6da2006-01-04 17:31:0737CLASSIFIERS = """\
Robert Kern19da9712008-06-18 22:53:4438Development Status :: 5 - Production/Stable
Travis Oliphantda9c6da2006-01-04 17:31:0739Intended Audience :: Science/Research
40Intended Audience :: Developers
41License :: OSI Approved
42Programming Language :: C
43Programming Language :: Python
rgommerscdac1202011-01-25 14:02:4044Programming Language :: Python :: 3
Alex Willmer193668a2015-08-05 09:29:3945Programming Language :: Python :: 3.5
Charles Harrisb33a5ee2016-11-05 19:48:3046Programming Language :: Python :: 3.6
Ralf Gommers943695b2018-06-28 02:26:1947Programming Language :: Python :: 3.7
Grzegorz Bokotac861a362019-10-24 18:29:0948Programming Language :: Python :: 3.8
Jon Dufresne334201d2019-08-27 04:18:3549Programming Language :: Python :: 3 :: Only
Alex Willmer193668a2015-08-05 09:29:3950Programming Language :: Python :: Implementation :: CPython
Travis Oliphantda9c6da2006-01-04 17:31:0751Topic :: Software Development
52Topic :: Scientific/Engineering
53Operating System :: Microsoft :: Windows
54Operating System :: POSIX
55Operating System :: Unix
56Operating System :: MacOS
57"""
58
Ralf Gommers58c1bf72012-11-05 19:47:2359MAJOR = 1
Charles Harriscde9a2e2019-06-30 17:34:1660MINOR = 18
Charles Harris263daf92020-03-17 16:32:1861MICRO = 3
Charles Harrisb07baa12020-04-19 17:07:2362ISRELEASED = True
Charles Harrisf658d562019-12-06 01:23:3263VERSION = '%d.%d.%d' % (MAJOR, MINOR, MICRO)
Stefan van der Waltb9a22d72009-06-17 14:28:0364
Ralf Gommers17716d72013-12-06 19:45:4065
Scott Sinclair58e63602010-11-09 15:09:1566# Return the git revision as a string
67def git_version():
David Cournapeau44d92ec2009-06-01 05:43:1668 def _minimal_ext_cmd(cmd):
69 # construct minimal environment
70 env = {}
Robert Kernc0be9952017-03-09 00:38:5471 for k in ['SYSTEMROOT', 'PATH', 'HOME']:
David Cournapeau5032b522009-09-18 10:10:3972 v = os.environ.get(k)
73 if v is not None:
74 env[k] = v
David Cournapeau44d92ec2009-06-01 05:43:1675 # LANGUAGE is used on win32
76 env['LANGUAGE'] = 'C'
77 env['LANG'] = 'C'
78 env['LC_ALL'] = 'C'
mattip6424fee2019-04-25 12:51:5579 out = subprocess.check_output(cmd, stderr=subprocess.STDOUT, env=env)
David Cournapeau44d92ec2009-06-01 05:43:1680 return out
81
David Cournapeau5623a7c2009-04-02 16:21:3082 try:
Scott Sinclair58e63602010-11-09 15:09:1583 out = _minimal_ext_cmd(['git', 'rev-parse', 'HEAD'])
Pauli Virtanend1a184c2010-11-15 01:00:0684 GIT_REVISION = out.strip().decode('ascii')
mattip1f1e8f92019-05-02 02:53:5485 except (subprocess.SubprocessError, OSError):
Scott Sinclaird5ed7442010-11-10 05:19:1586 GIT_REVISION = "Unknown"
David Cournapeau5e041cb2009-03-27 11:16:0187
Seth Troisi0498afe2019-09-23 19:30:4488 if not GIT_REVISION:
89 # this shouldn't happen but apparently can (see gh-8512)
90 GIT_REVISION = "Unknown"
91
Scott Sinclair58e63602010-11-09 15:09:1592 return GIT_REVISION
David Cournapeau5e041cb2009-03-27 11:16:0193
Ralf Gommers4b0ed792015-12-29 10:29:3894# BEFORE importing setuptools, remove MANIFEST. Otherwise it may not be
95# properly updated when the contents of directories change (true for distutils,
96# not sure about setuptools).
97if os.path.exists('MANIFEST'):
98 os.remove('MANIFEST')
David Cournapeau5bb1aa52009-03-27 16:39:0199
100# This is a bit hackish: we are setting a global variable so that the main
101# numpy __init__ can detect if it is being loaded by the setup routine, to
102# avoid attempting to load components that aren't built yet. While ugly, it's
103# a lot more robust than what was previously being used.
David Cournapeau2b517692009-12-03 15:53:29104builtins.__NUMPY_SETUP__ = True
David Cournapeau5bb1aa52009-03-27 16:39:01105
rgommers13212a52011-03-03 16:13:08106
Ralf Gommers17716d72013-12-06 19:45:40107def get_version_info():
Ralf Gommers87e12c12011-03-24 15:30:06108 # Adding the git rev number needs to be done inside write_version_py(),
109 # otherwise the import of numpy.version messes up the build under Python 3.
110 FULLVERSION = VERSION
111 if os.path.exists('.git'):
112 GIT_REVISION = git_version()
113 elif os.path.exists('numpy/version.py'):
114 # must be a source distribution, use existing version file
Ralf Gommerscd6d53f2011-04-17 14:04:11115 try:
116 from numpy.version import git_revision as GIT_REVISION
117 except ImportError:
MSeifert0478d269d2019-07-01 18:51:40118 raise ImportError("Unable to import git_revision. Try removing "
119 "numpy/version.py and the build directory "
Ralf Gommerscd6d53f2011-04-17 14:04:11120 "before building.")
Ralf Gommers87e12c12011-03-24 15:30:06121 else:
122 GIT_REVISION = "Unknown"
123
124 if not ISRELEASED:
Ã…smund Hjulstade15f2922015-02-10 17:07:55125 FULLVERSION += '.dev0+' + GIT_REVISION[:7]
Ralf Gommers87e12c12011-03-24 15:30:06126
Ralf Gommers17716d72013-12-06 19:45:40127 return FULLVERSION, GIT_REVISION
128
129
130def write_version_py(filename='numpy/version.py'):
131 cnt = """
132# THIS FILE IS GENERATED FROM NUMPY SETUP.PY
Ralf Gommers105a4982015-12-29 20:58:36133#
134# To compare versions robustly, use `numpy.lib.NumpyVersion`
Ralf Gommers17716d72013-12-06 19:45:40135short_version = '%(version)s'
136version = '%(version)s'
137full_version = '%(full_version)s'
138git_revision = '%(git_revision)s'
139release = %(isrelease)s
140
141if not release:
142 version = full_version
143"""
144 FULLVERSION, GIT_REVISION = get_version_info()
145
David Cournapeaua2ac9852009-03-27 11:15:36146 a = open(filename, 'w')
147 try:
Scott Sinclair58e63602010-11-09 15:09:15148 a.write(cnt % {'version': VERSION,
Charles Harris054d93a2017-11-29 18:53:21149 'full_version': FULLVERSION,
150 'git_revision': GIT_REVISION,
Scott Sinclair58e63602010-11-09 15:09:15151 'isrelease': str(ISRELEASED)})
David Cournapeaua2ac9852009-03-27 11:15:36152 finally:
153 a.close()
154
Ralf Gommers17716d72013-12-06 19:45:40155
Pearu Peterson471196b2006-03-31 08:59:36156def configuration(parent_package='',top_path=None):
157 from numpy.distutils.misc_util import Configuration
158
Pearu Peterson17d7cfe2006-04-04 12:26:14159 config = Configuration(None, parent_package, top_path)
Pearu Peterson471196b2006-03-31 08:59:36160 config.set_options(ignore_setup_xxx_py=True,
161 assume_default_configuration=True,
162 delegate_options_to_subpackages=True,
163 quiet=True)
Jarrod Millman0b77f0e2007-10-29 14:58:18164
Pearu Peterson471196b2006-03-31 08:59:36165 config.add_subpackage('numpy')
Charles Harris054d93a2017-11-29 18:53:21166 config.add_data_files(('numpy', 'LICENSE.txt'))
Jarrod Millman0b77f0e2007-10-29 14:58:18167
Pearu Peterson17d7cfe2006-04-04 12:26:14168 config.get_version('numpy/version.py') # sets config.version
Travis Oliphant00a35872007-05-31 04:57:01169
Pearu Peterson471196b2006-03-31 08:59:36170 return config
171
Ralf Gommers4b0ed792015-12-29 10:29:38172
Julian Taylor4cd72742014-01-29 21:59:19173def check_submodules():
174 """ verify that the submodules are checked out and clean
175 use `git submodule update --init`; on failure
176 """
177 if not os.path.exists('.git'):
178 return
179 with open('.gitmodules') as f:
180 for l in f:
181 if 'path' in l:
182 p = l.split('=')[-1].strip()
183 if not os.path.exists(p):
184 raise ValueError('Submodule %s missing' % p)
185
186
187 proc = subprocess.Popen(['git', 'submodule', 'status'],
188 stdout=subprocess.PIPE)
189 status, _ = proc.communicate()
190 status = status.decode("ascii", "replace")
191 for line in status.splitlines():
192 if line.startswith('-') or line.startswith('+'):
193 raise ValueError('Submodule not clean: %s' % line)
194
Ralf Gommers4b0ed792015-12-29 10:29:38195
Ralf Gommersa08fb602019-05-03 14:44:23196class concat_license_files():
Ralf Gommers33415902019-05-07 09:00:50197 """Merge LICENSE.txt and LICENSES_bundled.txt for sdist creation
Ralf Gommersa08fb602019-05-03 14:44:23198
199 Done this way to keep LICENSE.txt in repo as exact BSD 3-clause (see
200 gh-13447). This makes GitHub state correctly how NumPy is licensed.
201 """
202 def __init__(self):
203 self.f1 = 'LICENSE.txt'
Ralf Gommers33415902019-05-07 09:00:50204 self.f2 = 'LICENSES_bundled.txt'
Ralf Gommersa08fb602019-05-03 14:44:23205
206 def __enter__(self):
Ralf Gommers33415902019-05-07 09:00:50207 """Concatenate files and remove LICENSES_bundled.txt"""
Ralf Gommersa08fb602019-05-03 14:44:23208 with open(self.f1, 'r') as f1:
209 self.bsd_text = f1.read()
210
211 with open(self.f1, 'a') as f1:
212 with open(self.f2, 'r') as f2:
213 self.bundled_text = f2.read()
214 f1.write('\n\n')
215 f1.write(self.bundled_text)
216
Ralf Gommersa08fb602019-05-03 14:44:23217 def __exit__(self, exception_type, exception_value, traceback):
218 """Restore content of both files"""
219 with open(self.f1, 'w') as f:
220 f.write(self.bsd_text)
221
Ralf Gommersa08fb602019-05-03 14:44:23222
Ralf Gommers6770f982016-01-27 20:34:28223from distutils.command.sdist import sdist
Julian Taylor4cd72742014-01-29 21:59:19224class sdist_checked(sdist):
225 """ check submodules on sdist to prevent incomplete tarballs """
226 def run(self):
227 check_submodules()
Ralf Gommersa08fb602019-05-03 14:44:23228 with concat_license_files():
229 sdist.run(self)
Travis Oliphant14db4192005-09-14 22:08:46230
Ralf Gommers4b0ed792015-12-29 10:29:38231
mattip405b8022020-01-04 20:47:47232def get_build_overrides():
233 """
mattipc1f18752020-01-05 15:00:30234 Custom build commands to add `-std=c99` to compilation
mattip405b8022020-01-04 20:47:47235 """
236 from numpy.distutils.command.build_clib import build_clib
237 from numpy.distutils.command.build_ext import build_ext
238
239 def _is_using_gcc(obj):
240 is_gcc = False
241 if obj.compiler.compiler_type == 'unix':
242 cc = sysconfig.get_config_var("CC")
243 if not cc:
244 cc = ""
245 compiler_name = os.path.basename(cc)
246 is_gcc = "gcc" in compiler_name
247 return is_gcc
248
249 class new_build_clib(build_clib):
250 def build_a_library(self, build_info, lib_name, libraries):
251 if _is_using_gcc(self):
252 args = build_info.get('extra_compiler_args') or []
mattipc1f18752020-01-05 15:00:30253 args.append('-std=c99')
mattip405b8022020-01-04 20:47:47254 build_info['extra_compiler_args'] = args
255 build_clib.build_a_library(self, build_info, lib_name, libraries)
256
257 class new_build_ext(build_ext):
258 def build_extension(self, ext):
259 if _is_using_gcc(self):
mattipc1f18752020-01-05 15:00:30260 if '-std=c99' not in ext.extra_compile_args:
261 ext.extra_compile_args.append('-std=c99')
mattip405b8022020-01-04 20:47:47262 build_ext.build_extension(self, ext)
263 return new_build_clib, new_build_ext
264
265
Julian Taylorc9fd6342014-04-05 11:13:13266def generate_cython():
267 cwd = os.path.abspath(os.path.dirname(__file__))
268 print("Cythonizing sources")
mattip4e6a8122019-05-23 04:54:47269 for d in ('random',):
mattipfa8af412019-03-20 10:39:53270 p = subprocess.call([sys.executable,
271 os.path.join(cwd, 'tools', 'cythonize.py'),
mattipc53b2eb2019-04-09 21:50:42272 'numpy/{0}'.format(d)],
mattipfa8af412019-03-20 10:39:53273 cwd=cwd)
274 if p != 0:
275 raise RuntimeError("Running cythonize failed!")
Julian Taylorc9fd6342014-04-05 11:13:13276
Ralf Gommers4b0ed792015-12-29 10:29:38277
Ralf Gommersb9f48092015-12-29 11:05:30278def parse_setuppy_commands():
Ralf Gommers99e99e92015-12-29 14:24:22279 """Check the commands and respond appropriately. Disable broken commands.
280
281 Return a boolean value for whether or not to run the build or not (avoid
282 parsing Cython and template files if False).
283 """
Eric Wieserb8b2a0e2018-03-12 08:29:52284 args = sys.argv[1:]
285
286 if not args:
Ralf Gommersb9f48092015-12-29 11:05:30287 # User forgot to give an argument probably, let setuptools handle that.
Ralf Gommers99e99e92015-12-29 14:24:22288 return True
Ralf Gommersb9f48092015-12-29 11:05:30289
Ralf Gommers99e99e92015-12-29 14:24:22290 info_commands = ['--help-commands', '--name', '--version', '-V',
291 '--fullname', '--author', '--author-email',
292 '--maintainer', '--maintainer-email', '--contact',
293 '--contact-email', '--url', '--license', '--description',
294 '--long-description', '--platforms', '--classifiers',
295 '--keywords', '--provides', '--requires', '--obsoletes']
Ralf Gommers99e99e92015-12-29 14:24:22296
297 for command in info_commands:
Eric Wieserb8b2a0e2018-03-12 08:29:52298 if command in args:
Ralf Gommers99e99e92015-12-29 14:24:22299 return False
300
301 # Note that 'alias', 'saveopts' and 'setopt' commands also seem to work
302 # fine as they are, but are usually used together with one of the commands
303 # below and not standalone. Hence they're not added to good_commands.
304 good_commands = ('develop', 'sdist', 'build', 'build_ext', 'build_py',
Ralf Gommersab5c6d02016-01-16 14:21:23305 'build_clib', 'build_scripts', 'bdist_wheel', 'bdist_rpm',
mattip2e4af962019-09-19 20:47:29306 'bdist_wininst', 'bdist_msi', 'bdist_mpkg', 'build_src')
Ralf Gommers99e99e92015-12-29 14:24:22307
Ralf Gommersb9f48092015-12-29 11:05:30308 for command in good_commands:
Eric Wieserb8b2a0e2018-03-12 08:29:52309 if command in args:
Ralf Gommers99e99e92015-12-29 14:24:22310 return True
Ralf Gommersb9f48092015-12-29 11:05:30311
Ralf Gommersab5c6d02016-01-16 14:21:23312 # The following commands are supported, but we need to show more
Ralf Gommers99e99e92015-12-29 14:24:22313 # useful messages to the user
Eric Wieserb8b2a0e2018-03-12 08:29:52314 if 'install' in args:
Ralf Gommers99e99e92015-12-29 14:24:22315 print(textwrap.dedent("""
316 Note: if you need reliable uninstall behavior, then install
317 with pip instead of using `setup.py install`:
318
319 - `pip install .` (from a git repo or downloaded source
320 release)
Pierre de Buyl3f6672a2016-09-06 12:54:08321 - `pip install numpy` (last NumPy release on PyPi)
Ralf Gommers99e99e92015-12-29 14:24:22322
323 """))
324 return True
325
Eric Wieserb8b2a0e2018-03-12 08:29:52326 if '--help' in args or '-h' in sys.argv[1]:
Ralf Gommers99e99e92015-12-29 14:24:22327 print(textwrap.dedent("""
Pierre de Buyl3f6672a2016-09-06 12:54:08328 NumPy-specific help
Ralf Gommers99e99e92015-12-29 14:24:22329 -------------------
330
Pierre de Buyl3f6672a2016-09-06 12:54:08331 To install NumPy from here with reliable uninstall, we recommend
332 that you use `pip install .`. To install the latest NumPy release
Ralf Gommers99e99e92015-12-29 14:24:22333 from PyPi, use `pip install numpy`.
334
335 For help with build/installation issues, please ask on the
336 numpy-discussion mailing list. If you are sure that you have run
337 into a bug, please report it at https://github.com/numpy/numpy/issues.
338
339 Setuptools commands help
340 ------------------------
341 """))
342 return False
343
Eric Wieserb8b2a0e2018-03-12 08:29:52344
Ralf Gommers99e99e92015-12-29 14:24:22345 # The following commands aren't supported. They can only be executed when
346 # the user explicitly adds a --force command-line argument.
Ralf Gommersb9f48092015-12-29 11:05:30347 bad_commands = dict(
348 test="""
349 `setup.py test` is not supported. Use one of the following
350 instead:
351
352 - `python runtests.py` (to build and test)
353 - `python runtests.py --no-build` (to test installed numpy)
354 - `>>> numpy.test()` (run tests for installed numpy
355 from within an interpreter)
356 """,
357 upload="""
358 `setup.py upload` is not supported, because it's insecure.
359 Instead, build what you want to upload and upload those files
360 with `twine upload -s <filenames>` instead.
361 """,
362 upload_docs="`setup.py upload_docs` is not supported",
363 easy_install="`setup.py easy_install` is not supported",
364 clean="""
365 `setup.py clean` is not supported, use one of the following instead:
366
367 - `git clean -xdf` (cleans all files)
368 - `git clean -Xdf` (cleans all versioned files, doesn't touch
369 files that aren't checked into the git repo)
370 """,
371 check="`setup.py check` is not supported",
372 register="`setup.py register` is not supported",
373 bdist_dumb="`setup.py bdist_dumb` is not supported",
Ralf Gommers99e99e92015-12-29 14:24:22374 bdist="`setup.py bdist` is not supported",
375 build_sphinx="""
376 `setup.py build_sphinx` is not supported, use the
377 Makefile under doc/""",
378 flake8="`setup.py flake8` is not supported, use flake8 standalone",
Ralf Gommersb9f48092015-12-29 11:05:30379 )
Ralf Gommers99e99e92015-12-29 14:24:22380 bad_commands['nosetests'] = bad_commands['test']
Luca Mussi69d2cc82016-04-07 11:24:49381 for command in ('upload_docs', 'easy_install', 'bdist', 'bdist_dumb',
Ralf Gommers99e99e92015-12-29 14:24:22382 'register', 'check', 'install_data', 'install_headers',
383 'install_lib', 'install_scripts', ):
384 bad_commands[command] = "`setup.py %s` is not supported" % command
385
Ralf Gommersb9f48092015-12-29 11:05:30386 for command in bad_commands.keys():
Eric Wieserb8b2a0e2018-03-12 08:29:52387 if command in args:
Ralf Gommersb9f48092015-12-29 11:05:30388 print(textwrap.dedent(bad_commands[command]) +
389 "\nAdd `--force` to your command to use it anyway if you "
390 "must (unsupported).\n")
391 sys.exit(1)
392
Eric Wieserb8b2a0e2018-03-12 08:29:52393 # Commands that do more than print info, but also don't need Cython and
394 # template parsing.
395 other_commands = ['egg_info', 'install_egg_info', 'rotate']
396 for command in other_commands:
397 if command in args:
398 return False
399
Ralf Gommers99e99e92015-12-29 14:24:22400 # If we got here, we didn't detect what setup.py command was given
401 import warnings
402 warnings.warn("Unrecognized setuptools command, proceeding with "
Sebastian Berg7884a8c2016-01-23 14:58:58403 "generating Cython sources and expanding templates", stacklevel=2)
Ralf Gommers99e99e92015-12-29 14:24:22404 return True
Ralf Gommersb9f48092015-12-29 11:05:30405
406
Ralf Gommers17716d72013-12-06 19:45:40407def setup_package():
mattip8b266552019-07-03 22:24:42408 src_path = os.path.dirname(os.path.abspath(__file__))
Pauli Virtanen68159432009-12-06 11:56:18409 old_path = os.getcwd()
410 os.chdir(src_path)
411 sys.path.insert(0, src_path)
412
Pauli Virtanen01312182010-11-23 16:50:54413 # Rewrite the version file everytime
414 write_version_py()
415
Charles Harrisf22a33b2018-08-22 17:57:48416 # The f2py scripts that will be installed
417 if sys.platform == 'win32':
418 f2py_cmds = [
419 'f2py = numpy.f2py.f2py2e:main',
420 ]
421 else:
422 f2py_cmds = [
423 'f2py = numpy.f2py.f2py2e:main',
424 'f2py%s = numpy.f2py.f2py2e:main' % sys.version_info[:1],
425 'f2py%s.%s = numpy.f2py.f2py2e:main' % sys.version_info[:2],
426 ]
427
mattip405b8022020-01-04 20:47:47428 cmdclass={"sdist": sdist_checked,
429 }
Ralf Gommers17716d72013-12-06 19:45:40430 metadata = dict(
431 name = 'numpy',
432 maintainer = "NumPy Developers",
Ralf Gommers46f7dca2017-03-26 07:52:46433 maintainer_email = "numpy-discussion@python.org",
Ralf Gommers17716d72013-12-06 19:45:40434 description = DOCLINES[0],
435 long_description = "\n".join(DOCLINES[2:]),
Mike Toews83828f52018-06-16 06:18:19436 url = "https://www.numpy.org",
Ralf Gommers17716d72013-12-06 19:45:40437 author = "Travis E. Oliphant et al.",
Charles Harrisec5985d2018-01-10 18:00:11438 download_url = "https://pypi.python.org/pypi/numpy",
Jarrod Millman0486b6d2019-04-12 01:11:21439 project_urls={
440 "Bug Tracker": "https://github.com/numpy/numpy/issues",
441 "Documentation": "https://docs.scipy.org/doc/numpy/",
442 "Source Code": "https://github.com/numpy/numpy",
443 },
Ralf Gommers17716d72013-12-06 19:45:40444 license = 'BSD',
445 classifiers=[_f for _f in CLASSIFIERS.split('\n') if _f],
446 platforms = ["Windows", "Linux", "Solaris", "Mac OS-X", "Unix"],
447 test_suite='nose.collector',
mattip405b8022020-01-04 20:47:47448 cmdclass=cmdclass,
Juan Luis Cano Rodríguez4adf52e2018-12-27 00:22:20449 python_requires='>=3.5',
Nathaniel J. Smithf46e7162018-01-23 08:02:04450 zip_safe=False,
Charles Harrisf22a33b2018-08-22 17:57:48451 entry_points={
452 'console_scripts': f2py_cmds
453 },
Ralf Gommers17716d72013-12-06 19:45:40454 )
455
Ralf Gommers99e99e92015-12-29 14:24:22456 if "--force" in sys.argv:
457 run_build = True
Ralf Gommers20c3c2a2017-06-20 10:09:40458 sys.argv.remove('--force')
Ralf Gommers99e99e92015-12-29 14:24:22459 else:
460 # Raise errors for unsupported commands, improve help output, etc.
461 run_build = parse_setuppy_commands()
Ralf Gommersb9f48092015-12-29 11:05:30462
463 from setuptools import setup
Ralf Gommers99e99e92015-12-29 14:24:22464 if run_build:
Ralf Gommers17716d72013-12-06 19:45:40465 from numpy.distutils.core import setup
Julian Taylorc9fd6342014-04-05 11:13:13466 cwd = os.path.abspath(os.path.dirname(__file__))
Ralf Gommersd630d962019-09-08 05:01:41467 if not 'sdist' in sys.argv:
468 # Generate Cython sources, unless we're generating an sdist
Julian Taylorc9fd6342014-04-05 11:13:13469 generate_cython()
Ralf Gommers4b0ed792015-12-29 10:29:38470
Ralf Gommers17716d72013-12-06 19:45:40471 metadata['configuration'] = configuration
mattip405b8022020-01-04 20:47:47472 # Customize extension building
473 cmdclass['build_clib'], cmdclass['build_ext'] = get_build_overrides()
Ralf Gommers99e99e92015-12-29 14:24:22474 else:
475 # Version number is added to metadata inside configuration() if build
476 # is run.
477 metadata['version'] = get_version_info()[0]
Pauli Virtanen68159432009-12-06 11:56:18478
Pearu Petersone8fa0132003-03-07 18:08:28479 try:
Ralf Gommers17716d72013-12-06 19:45:40480 setup(**metadata)
Pearu Petersone8fa0132003-03-07 18:08:28481 finally:
482 del sys.path[0]
483 os.chdir(old_path)
Travis Oliphant14db4192005-09-14 22:08:46484 return
Pearu Petersonc415fd12002-11-18 22:39:31485
Ralf Gommers17716d72013-12-06 19:45:40486
Travis Oliphant14db4192005-09-14 22:08:46487if __name__ == '__main__':
Pearu Petersone8fa0132003-03-07 18:08:28488 setup_package()
Ralf Gommersbbee7472016-08-21 05:23:35489 # This may avoid problems where numpy is installed via ``*_requires`` by
490 # setuptools, the global namespace isn't reset properly, and then numpy is
491 # imported later (which will then fail to load numpy extension modules).
492 # See gh-7956 for details
493 del builtins.__NUMPY_SETUP__