##// END OF EJS Templates
Make event triggering robust to (un)registration....
Make event triggering robust to (un)registration. Event callbacks can register or unregister new callbacks for the same event while executing, and the previous triggering implementation allowed for event callbacks to be inadvertently skipped. The fix is to make a copy of the list of callbacks before executing any of them. With this change, the resulting semantics are simple: any callbacks registered before triggering are executed, and any new callbacks registered are only visible at the next triggering of the event. Note that this could potentially break existing callers who expected newly-appended callbacks were immediately executed. Fixes #9447. Originally based on a patch by @marksandler2.

File last commit:

r22300:734450ac merge
r22317:68860ee5
Show More
setup.py
300 lines | 10.2 KiB | text/x-python | PythonLexer
Fernando Perez
Fix setup.py script to be executable (other tools expect this)
r4924 #!/usr/bin/env python
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 # -*- coding: utf-8 -*-
"""Setup script for IPython.
Under Posix environments it works like a typical setup.py script.
Under Windows, the command sdist is not supported, since IPython
requires utilities which are not available under Windows."""
#-----------------------------------------------------------------------------
# Copyright (c) 2008-2011, IPython Development Team.
# Copyright (c) 2001-2007, Fernando Perez <fernando.perez@colorado.edu>
# Copyright (c) 2001, Janko Hauser <jhauser@zscout.de>
# Copyright (c) 2001, Nathaniel Gray <n8gray@caltech.edu>
#
# Distributed under the terms of the Modified BSD License.
#
Jonathan Frederic
s/COPYING.txt/COPYING.rst
r15990 # The full license is in the file COPYING.rst, distributed with this software.
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 #-----------------------------------------------------------------------------
#-----------------------------------------------------------------------------
# Minimal Python version sanity check
#-----------------------------------------------------------------------------
from __future__ import print_function
Fernando Perez
Inform user at install time of minimal python requirements if not met....
r2493
import sys
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 # This check is also made in IPython/__init__, don't forget to update both when
# changing Python version requirements.
MinRK
check for Python 3.2...
r16173 v = sys.version_info
if v[:2] < (2,7) or (v[0] >= 3 and v[:2] < (3,3)):
error = "ERROR: IPython requires Python version 2.7 or 3.3 or above."
MinRK
update version-check message in setup.py and IPython.__init__...
r12473 print(error, file=sys.stderr)
sys.exit(1)
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829
PY3 = (sys.version_info[0] >= 3)
# At least we're on the python version we need, move on.
#-------------------------------------------------------------------------------
# Imports
#-------------------------------------------------------------------------------
# Stdlib imports
import os
from glob import glob
# 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')
from distutils.core import setup
# Our own imports
from setupbase import target_update
from setupbase import (
setup_args,
find_packages,
find_package_data,
MinRK
run check_package_data as part of build_py...
r15165 check_package_data_first,
Thomas Kluyver
Rework setup to allow installing on Python 2 and 3....
r13452 find_entry_points,
build_scripts_entrypt,
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 find_data_files,
MinRK
ensure submodules exist prior to doing anything...
r10484 git_prebuild,
Thomas Kluyver
Rework setup to allow installing on Python 2 and 3....
r13452 install_symlinked,
install_lib_symlink,
install_scripts_for_symlink,
Thomas Kluyver
Add 'unsymlink command to remove the symlink
r13862 unsymlink,
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 )
isfile = os.path.isfile
pjoin = os.path.join
#-------------------------------------------------------------------------------
# Handle OS specific things
#-------------------------------------------------------------------------------
MinRK
don't give up on weird os names...
r10087 if os.name in ('nt','dos'):
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 os_name = 'windows'
Ville M. Vainio
more crlf
r1033 else:
MinRK
don't give up on weird os names...
r10087 os_name = os.name
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829
# Under Windows, 'sdist' has not been supported. Now that the docs build with
# Sphinx it might work, but let's not turn it on until someone confirms that it
# actually works.
if os_name == 'windows' and 'sdist' in sys.argv:
print('The sdist command is not available under Windows. Exiting.')
sys.exit(1)
MinRK
ensure submodules exist prior to doing anything...
r10484
#-------------------------------------------------------------------------------
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 # Things related to the IPython documentation
#-------------------------------------------------------------------------------
# update the manuals when building a source dist
if len(sys.argv) >= 2 and sys.argv[1] in ('sdist','bdist_rpm'):
# List of things to be updated. Each entry is a triplet of args for
# target_update()
to_update = [
('docs/man/ipython.1.gz',
['docs/man/ipython.1'],
'cd docs/man && gzip -9c ipython.1 > ipython.1.gz'),
]
[ target_update(*t) for t in to_update ]
#---------------------------------------------------------------------------
# Find all the packages, package data, and data_files
#---------------------------------------------------------------------------
packages = find_packages()
package_data = find_package_data()
MinRK
only validate package_data when it might be used...
r15114
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 data_files = find_data_files()
setup_args['packages'] = packages
setup_args['package_data'] = package_data
setup_args['data_files'] = data_files
#---------------------------------------------------------------------------
MinRK
record sysinfo in sdist...
r7794 # custom distutils commands
MinRK
enable uploading wininst to PyPI with tools/release_windows.py...
r7792 #---------------------------------------------------------------------------
MinRK
record sysinfo in sdist...
r7794 # imports here, so they are after setuptools import if there was one
from distutils.command.sdist import sdist
from distutils.command.upload import upload
MinRK
enable uploading wininst to PyPI with tools/release_windows.py...
r7792
class UploadWindowsInstallers(upload):
Christoph Gohlke
Improve Windows start menu shortcuts
r8814
MinRK
enable uploading wininst to PyPI with tools/release_windows.py...
r7792 description = "Upload Windows installers to PyPI (only used from tools/release_windows.py)"
user_options = upload.user_options + [
('files=', 'f', 'exe file (or glob) to upload')
]
def initialize_options(self):
upload.initialize_options(self)
meta = self.distribution.metadata
base = '{name}-{version}'.format(
name=meta.get_name(),
version=meta.get_version()
)
self.files = os.path.join('dist', '%s.*.exe' % base)
Christoph Gohlke
Improve Windows start menu shortcuts
r8814
MinRK
enable uploading wininst to PyPI with tools/release_windows.py...
r7792 def run(self):
for dist_file in glob(self.files):
self.upload_file('bdist_wininst', 'any', dist_file)
MinRK
record sysinfo in sdist...
r7794 setup_args['cmdclass'] = {
Min RK
remove notebook-specific parts of setup, git-hooks
r21249 'build_py': \
check_package_data_first(git_prebuild('IPython')),
'sdist' : git_prebuild('IPython', sdist),
MinRK
record sysinfo in sdist...
r7794 'upload_wininst' : UploadWindowsInstallers,
Thomas Kluyver
Rework setup to allow installing on Python 2 and 3....
r13452 'symlink': install_symlinked,
'install_lib_symlink': install_lib_symlink,
'install_scripts_sym': install_scripts_for_symlink,
Thomas Kluyver
Add 'unsymlink command to remove the symlink
r13862 'unsymlink': unsymlink,
MinRK
record sysinfo in sdist...
r7794 }
MinRK
enable uploading wininst to PyPI with tools/release_windows.py...
r7792
Min RK
disable install from master...
r21036
MinRK
enable uploading wininst to PyPI with tools/release_windows.py...
r7792 #---------------------------------------------------------------------------
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 # Handle scripts, dependencies, and setuptools specific things
#---------------------------------------------------------------------------
# For some commands, use setuptools. Note that we do NOT list install here!
# If you want a setuptools-enhanced install, just run 'setupegg.py install'
needs_setuptools = set(('develop', 'release', 'bdist_egg', 'bdist_rpm',
MinRK
always construct requirements
r15030 'bdist', 'bdist_dumb', 'bdist_wininst', 'bdist_wheel',
'egg_info', 'easy_install', 'upload', 'install_egg_info',
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 ))
if len(needs_setuptools.intersection(sys.argv)) > 0:
import setuptools
# This dict is used for passing extra arguments that are setuptools
# specific to setup
setuptools_extra_args = {}
MinRK
always construct requirements
r15030 # setuptools requirements
extras_require = dict(
Min RK
ipython_parallel is now ipyparallel
r21326 parallel = ['ipyparallel'],
Min RK
jupyter_qtconsole is now qtconsole
r21338 qtconsole = ['qtconsole'],
Min RK
use napoleon instead of numpydoc
r21711 doc = ['Sphinx>=1.3'],
Matthias Bussonnier
Remove unnecessary test dependency.
r22298 test = ['nose>=0.10.1', 'requests', 'testpath', 'pygments'],
MinRK
add ipython[terminal] dependency group...
r16386 terminal = [],
Min RK
ipython_kernel is now ipykernel
r21337 kernel = ['ipykernel'],
Min RK
jupyter_nbformat is now nbformat
r21345 nbformat = ['nbformat'],
Min RK
ipython[notebook] should depend on ipywidgets
r21743 notebook = ['notebook', 'ipywidgets'],
Min RK
jupyter_nbconvert is now nbconvert...
r21339 nbconvert = ['nbconvert'],
MinRK
always construct requirements
r15030 )
MinRK
remove path from external
r20811 install_requires = [
Min RK
missing comma in setuptools requirement
r22035 'setuptools>=18.5',
Kelly Liu
Initial patch with Jedi completion (no function header description)....
r22292 'jedi',
MinRK
remove decorator from external
r20813 'decorator',
Min RK
remove pickleshare from external
r20844 'pickleshare',
MinRK
remove simplegeneric from external...
r20816 'simplegeneric>0.8',
Min RK
add traitlets as setup.py dependency
r21201 'traitlets',
Jonathan Slenders
Upgrade to prompt_toolkit 1.0.0.
r22296 'prompt_toolkit>=1.0.0,<2.0.0',
Thomas Kluyver
Add explicit dependency on pygments...
r22126 'pygments',
MinRK
remove path from external
r20811 ]
MinRK
add ipython[terminal] dependency group...
r16386
Min RK
update platform-specific dependencies...
r21372 # Platform-specific dependencies:
# This is the correct way to specify these,
# but requires pip >= 6. pip < 6 ignores these.
Min RK
workaround setuptools misspelling of platform_python_implementation...
r21659
Min RK
update platform-specific dependencies...
r21372 extras_require.update({
Min RK
only use backports.shutil_get_terminal_size on Python 2...
r22266 ':python_version == "2.7"': ['backports.shutil_get_terminal_size'],
Min RK
use pathlib for utils.text.paths...
r22249 ':python_version == "2.7" or python_version == "3.3"': ['pathlib2'],
Min RK
update platform-specific dependencies...
r21372 ':sys_platform != "win32"': ['pexpect'],
Min RK
only require gnureadline on CPython...
r21652 ':sys_platform == "darwin"': ['appnope'],
Thomas Kluyver
IPython requires colorama on Windows...
r22134 ':sys_platform == "win32"': ['colorama'],
Min RK
update platform-specific dependencies...
r21372 'test:python_version == "2.7"': ['mock'],
})
# FIXME: re-specify above platform dependencies for pip < 6
# These would result in non-portable bdists.
if not any(arg.startswith('bdist') for arg in sys.argv):
if sys.version_info < (3, 3):
extras_require['test'].append('mock')
if sys.platform == 'darwin':
Min RK
only require gnureadline on CPython...
r21652 install_requires.extend(['appnope'])
have_readline = False
try:
import readline
except ImportError:
pass
else:
if 'libedit' not in readline.__doc__:
have_readline = True
if not have_readline:
install_requires.extend(['gnureadline'])
Min RK
update platform-specific dependencies...
r21372
if sys.platform.startswith('win'):
extras_require['terminal'].append('pyreadline>=2.0')
else:
install_requires.append('pexpect')
Min RK
workaround setuptools misspelling of platform_python_implementation...
r21659
# workaround pypa/setuptools#147, where setuptools misspells
# platform_python_implementation as python_implementation
if 'setuptools' in sys.modules:
for key in list(extras_require):
if 'platform_python_implementation' in key:
new_key = key.replace('platform_python_implementation', 'python_implementation')
extras_require[new_key] = extras_require.pop(key)
cgohlke
Remove PyReadline as a install requirement on Windows
r16244
Min RK
calculate 'all' dependency set after finishing the rest...
r20256 everything = set()
Min RK
don't include platform-specific dependencies in ipython[all]
r21644 for key, deps in extras_require.items():
if ':' not in key:
everything.update(deps)
Min RK
calculate 'all' dependency set after finishing the rest...
r20256 extras_require['all'] = everything
MinRK
always construct requirements
r15030
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 if 'setuptools' in sys.modules:
setuptools_extra_args['zip_safe'] = False
Lev Abalkin
Closes #7558: Added pygments entry points for ipython lexers.
r20117 setuptools_extra_args['entry_points'] = {
'console_scripts': find_entry_points(),
'pygments.lexers': [
Thomas Kluyver
Move IPython lexers module to lib...
r20625 'ipythonconsole = IPython.lib.lexers:IPythonConsoleLexer',
'ipython = IPython.lib.lexers:IPythonLexer',
'ipython3 = IPython.lib.lexers:IPython3Lexer',
Lev Abalkin
Closes #7558: Added pygments entry points for ipython lexers.
r20117 ],
}
MinRK
always construct requirements
r15030 setup_args['extras_require'] = extras_require
requires = setup_args['install_requires'] = install_requires
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829
# Script to be run by the windows binary installer after the default setup
# routine, to add shortcuts and similar windows-only things. Windows
# post-install scripts MUST reside in the scripts/ dir, otherwise distutils
# doesn't find them.
if 'bdist_wininst' in sys.argv:
if len(sys.argv) > 2 and \
('sdist' in sys.argv or 'bdist_rpm' in sys.argv):
Matthias Bussonnier
Some code cleanup in javascript and python...
r19739 print("ERROR: bdist_wininst must be run alone. Exiting.", file=sys.stderr)
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 sys.exit(1)
Christoph Gohlke
Improve Windows start menu shortcuts
r8814 setup_args['data_files'].append(
['Scripts', ('scripts/ipython.ico', 'scripts/ipython_nb.ico')])
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 setup_args['scripts'] = [pjoin('scripts','ipython_win_post_install.py')]
setup_args['options'] = {"bdist_wininst":
{"install_script":
"ipython_win_post_install.py"}}
Christoph Gohlke
Improve Windows start menu shortcuts
r8814
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 else:
Thomas Kluyver
Rework setup to allow installing on Python 2 and 3....
r13452 # scripts has to be a non-empty list, or install_scripts isn't called
setup_args['scripts'] = [e.split('=')[0].strip() for e in find_entry_points()]
setup_args['cmdclass']['build_scripts'] = build_scripts_entrypt
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829
#---------------------------------------------------------------------------
# Do the actual setup now
#---------------------------------------------------------------------------
setup_args.update(setuptools_extra_args)
Matthias Bussonnier
Add release instructions for IPython....
r21986
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 def main():
setup(**setup_args)
Fernando Perez
Move cleanup to main setup.py, where it belongs....
r2460
Thomas Kluyver
Remove separate setup.py file for Python 3.
r5829 if __name__ == '__main__':
main()