""" build [and upload] Windows IPython releases usage: python tools/release_windows.py [--github] [--pypi] Meant to be run on Windows Requires that you have python and python3 on your PATH """ import glob import os import shutil import sys from toollib import sh try: import gh_api except ImportError: gh_api = None github = '--github' in sys.argv cmd_t = "{py} setup.py bdist_wininst" pypi = '--pypi' in sys.argv pypi_cmd_t = "python setup.py upload_wininst -f {fname}" # Windows Python cannot normally cross-compile, # so you must have 4 Pythons to make 4 installers: # http://docs.python.org/2/distutils/builtdist.html#cross-compiling-on-windows pythons = { 2: { 'win32' : r'C:\\Python27\Python.exe', 'win-amd64': r'C:\\Python27_64\Python.exe', }, 3: { 'win32' : r'C:\\Python33\Python.exe', 'win-amd64': r'C:\\Python33_64\Python.exe', }, } for v,plat_py in pythons.items(): # deliberately mangle the name, # so easy_install doesn't find these and do horrible wrong things try: shutil.rmtree('build') except OSError: pass for plat,py in plat_py.items(): cmd = cmd_t.format(**locals()) sh(cmd) orig = glob.glob(os.path.join('dist', 'ipython-*.{plat}.exe'.format(**locals())))[0] mangled = orig.replace('.{plat}.exe'.format(**locals()), '.py{v}-{plat}.exe'.format(**locals()) ) os.rename(orig, mangled) if pypi: sh(pypi_cmd_t.format(fname=mangled)) if github and gh_api: print ("Uploading %s to GitHub" % mangled) desc = "IPython Installer for Python {v}.x on {plat}".format(**locals()) gh_api.post_download('ipython/ipython', mangled, description=desc)