#!/usr/bin/env python # -*- 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 The IPython Development Team # # Distributed under the terms of the BSD License. The full license is in # the file COPYING, distributed as part of this software. #------------------------------------------------------------------------------- #------------------------------------------------------------------------------- # Imports #------------------------------------------------------------------------------- # Stdlib imports import os import sys 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 # Local imports from IPython.genutils import target_update from setupbase import ( setup_args, find_packages, find_package_data, find_scripts, find_data_files, check_for_dependencies ) isfile = os.path.isfile #------------------------------------------------------------------------------- # Handle OS specific things #------------------------------------------------------------------------------- if os.name == 'posix': os_name = 'posix' elif os.name in ['nt','dos']: os_name = 'windows' else: print 'Unsupported operating system:',os.name sys.exit(1) # 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) #------------------------------------------------------------------------------- # 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'): import textwrap # List of things to be updated. Each entry is a triplet of args for # target_update() to_update = [ # FIXME - Disabled for now: we need to redo an automatic way # of generating the magic info inside the rst. #('doc/magic.tex', #['IPython/Magic.py'], #"cd doc && ./update_magic.sh" ), ('doc/ipython.1.gz', ['doc/ipython.1'], "cd doc && gzip -9c ipython.1 > ipython.1.gz"), ('doc/pycolor.1.gz', ['doc/pycolor.1'], "cd doc && gzip -9c pycolor.1 > pycolor.1.gz"), ] # Only build the docs is sphinx is present try: import sphinx except ImportError: pass else: pass # BEG: This is disabled as I am not sure what to depend on. # I actually don't think we should be automatically building # the docs for people. # The do_sphinx scripts builds html and pdf, so just one # target is enough to cover all manual generation # to_update.append( # ('doc/manual/ipython.pdf', # ['IPython/Release.py','doc/source/ipython.rst'], # "cd docs && python do_sphinx.py") # ) [ target_update(*t) for t in to_update ] #--------------------------------------------------------------------------- # Find all the packages, package data, scripts and data_files #--------------------------------------------------------------------------- packages = find_packages() package_data = find_package_data() scripts = find_scripts() data_files = find_data_files() #--------------------------------------------------------------------------- # Handle dependencies and setuptools specific things #--------------------------------------------------------------------------- # This dict is used for passing extra arguments that are setuptools # specific to setup setuptools_extra_args = {} if 'setuptools' in sys.modules: setuptools_extra_args['zip_safe'] = False setuptools_extra_args['entry_points'] = { 'console_scripts': [ 'ipython = IPython.ipapi:launch_new_instance', 'pycolor = IPython.PyColorize:main', 'ipcontroller = IPython.kernel.scripts.ipcontroller:main', 'ipengine = IPython.kernel.scripts.ipengine:main', 'ipcluster = IPython.kernel.scripts.ipcluster:main', 'ipythonx = IPython.frontend.wx.ipythonx:main' ] } setup_args["extras_require"] = dict( kernel = [ "zope.interface>=3.4.1", "Twisted>=8.0.1", "foolscap>=0.2.6" ], doc=['Sphinx>=0.3','pygments'], test='nose>=0.10.1', security=["pyOpenSSL>=0.6"] ) # Allow setuptools to handle the scripts scripts = [] # eggs will lack docs, examples data_files = [] else: # package_data of setuptools was introduced to distutils in 2.4 cfgfiles = filter(isfile, glob('IPython/UserConfig/*')) if sys.version_info < (2,4): data_files.append(('lib', 'IPython/UserConfig', cfgfiles)) # If we are running without setuptools, call this function which will # check for dependencies an inform the user what is needed. This is # just to make life easy for users. check_for_dependencies() #--------------------------------------------------------------------------- # Do the actual setup now #--------------------------------------------------------------------------- setup_args['packages'] = packages setup_args['package_data'] = package_data setup_args['scripts'] = scripts setup_args['data_files'] = data_files setup_args.update(setuptools_extra_args) if __name__ == '__main__': setup(**setup_args)