Viewing file: interactive.py (6 KB) -rw-r--r-- Select action/file-type: (+) | (+) | (+) | Code (+) | Session (+) | (+) | SDB (+) | (+) | (+) | (+) | (+) | (+) |
import os import sys from pprint import pformat
__all__ = ['interactive_sys_argv']
def show_information(*args): print 'Python',sys.version for a in ['platform','prefix','byteorder','path']: print 'sys.%s = %s' % (a,pformat(getattr(sys,a))) for a in ['name']: print 'os.%s = %s' % (a,pformat(getattr(os,a))) if hasattr(os,'uname'): print 'system,node,release,version,machine = ',os.uname()
def show_environ(*args): for k,i in os.environ.items(): print ' %s = %s' % (k, i)
def show_fortran_compilers(*args): from fcompiler import show_fcompilers show_fcompilers()
def show_compilers(*args): from distutils.ccompiler import show_compilers show_compilers()
def show_tasks(argv,ccompiler,fcompiler): print """\
Tasks: i - Show python/platform/machine information ie - Show environment information c - Show C compilers information c<name> - Set C compiler (current:%s) f - Show Fortran compilers information f<name> - Set Fortran compiler (current:%s) e - Edit proposed sys.argv[1:].
Task aliases: 0 - Configure 1 - Build 2 - Install 2<prefix> - Install with prefix. 3 - Inplace build 4 - Source distribution 5 - Binary distribution
Proposed sys.argv = %s """ % (ccompiler, fcompiler, argv)
import shlex
def edit_argv(*args): argv = args[0] readline = args[1] if readline is not None: readline.add_history(' '.join(argv[1:])) try: s = raw_input('Edit argv [UpArrow to retrive %r]: ' % (' '.join(argv[1:]))) except EOFError: return if s: argv[1:] = shlex.split(s) return
def interactive_sys_argv(argv): print '='*72 print 'Starting interactive session' print '-'*72
readline = None try: try: import readline except ImportError: pass else: import tempfile tdir = tempfile.gettempdir() username = os.environ.get('USER',os.environ.get('USERNAME','UNKNOWN')) histfile = os.path.join(tdir,".pyhist_interactive_setup-" + username) try: try: readline.read_history_file(histfile) except IOError: pass import atexit atexit.register(readline.write_history_file, histfile) except AttributeError: pass except Exception, msg: print msg
task_dict = {'i':show_information, 'ie':show_environ, 'f':show_fortran_compilers, 'c':show_compilers, 'e':edit_argv, } c_compiler_name = None f_compiler_name = None
while 1: show_tasks(argv,c_compiler_name, f_compiler_name) try: task = raw_input('Choose a task (^D to quit, Enter to continue with setup): ') except EOFError: print task = 'quit' ltask = task.lower() if task=='': break if ltask=='quit': sys.exit() task_func = task_dict.get(ltask,None) if task_func is None: if ltask[0]=='c': c_compiler_name = task[1:] if c_compiler_name=='none': c_compiler_name = None continue if ltask[0]=='f': f_compiler_name = task[1:] if f_compiler_name=='none': f_compiler_name = None continue if task[0]=='2' and len(task)>1: prefix = task[1:] task = task[0] else: prefix = None if task == '4': argv[1:] = ['sdist','-f'] continue elif task in '01235': cmd_opts = {'config':[],'config_fc':[], 'build_ext':[],'build_src':[], 'build_clib':[]} if c_compiler_name is not None: c = '--compiler=%s' % (c_compiler_name) cmd_opts['config'].append(c) if task != '0': cmd_opts['build_ext'].append(c) cmd_opts['build_clib'].append(c) if f_compiler_name is not None: c = '--fcompiler=%s' % (f_compiler_name) cmd_opts['config_fc'].append(c) if task != '0': cmd_opts['build_ext'].append(c) cmd_opts['build_clib'].append(c) if task=='3': cmd_opts['build_ext'].append('--inplace') cmd_opts['build_src'].append('--inplace') conf = [] sorted_keys = ['config','config_fc','build_src', 'build_clib','build_ext'] for k in sorted_keys: opts = cmd_opts[k] if opts: conf.extend([k]+opts) if task=='0': if 'config' not in conf: conf.append('config') argv[1:] = conf elif task=='1': argv[1:] = conf+['build'] elif task=='2': if prefix is not None: argv[1:] = conf+['install','--prefix=%s' % (prefix)] else: argv[1:] = conf+['install'] elif task=='3': argv[1:] = conf+['build'] elif task=='5': if sys.platform=='win32': argv[1:] = conf+['bdist_wininst'] else: argv[1:] = conf+['bdist'] else: print 'Skipping unknown task:',`task` else: print '-'*68 try: task_func(argv,readline) except Exception,msg: print 'Failed running task %s: %s' % (task,msg) break print '-'*68 print
print '-'*72 return argv
|