diff --git a/scripts/ipython.ico b/scripts/ipython.ico new file mode 100644 index 0000000000000000000000000000000000000000..2d4ac507a309315adfe64c7a6e2b14ad7f4a1dd5 GIT binary patch literal 32580 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 z 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 z zTMu}h!cT(*q4JFBw%jHMrsB^qQZ$l1p4aWvZ3}r0{+FxQpVYoSHD2!jyS1in5AE^fA znTr{UJm&hDGzXF8>VI~*{O@u<&$Yom7|xG%miVFkUrXQfg+G%2TfXjR@-OGhel-8r beAO~OYThp`^hwM5B6EU&NQ4lPpiuu0{JaDJ literal 0 Hc$@ 2**32]) -def mkshortcut(target,description,link_file,*args,**kw): - """make a shortcut if it doesn't exist, and register its creation""" - - create_shortcut(target, description, link_file,*args,**kw) - file_created(link_file) +def mkshortcut(target, description, linkdir, arguments="", iconpath='', + workdir="%HOMEDRIVE%%HOMEPATH%", iconindex=0): + """Make a shortcut if it doesn't exist and register its creation.""" + filename = pjoin(linkdir, description + '.lnk') + description = "%s %s" % (description, pyver) + create_shortcut(target, description, filename, arguments, workdir, + iconpath, iconindex) + file_created(filename) + + +def arguments(scriptsdir, script, scriptargs=''): + """Return command line arguments to be passed to the python executable.""" + cmdbase = suffix(pjoin(scriptsdir, script)) + if have_setuptools: + cmdbase += '-script.py' + return '"%s" %s' % (cmdbase, scriptargs) + def suffix(s): - """add '3' suffix to programs for Python 3""" + """Add '3' suffix to programs for Python 3.""" if sys.version_info[0] == 3: - s = s+'3' + s = s + '3' return s + def install(): """Routine to be run by the win32 installer with the -install switch.""" - # Get some system constants - prefix = sys.prefix - python = pjoin(prefix, 'python.exe') - pythonw = pjoin(prefix, 'pythonw.exe') - have_setuptools = 'setuptools' in sys.modules - + python = pjoin(sys.prefix, 'python.exe') + pythonw = pjoin(sys.prefix, 'pythonw.exe') + if not have_setuptools: # This currently doesn't work without setuptools, # so don't bother making broken links - print("Distribute (setuptools) is required to create Start Menu items.", file=sys.stderr) - print("Re-run this installer after installing distribute to get Start Menu items.", file=sys.stderr) + print("Distribute (setuptools) is required to" + " create Start Menu items.", file=sys.stderr) + print("Re-run this installer after installing" + " distribute to get Start Menu items.", file=sys.stderr) return - + # Lookup path to common startmenu ... ip_start_menu = pjoin(get_special_folder_path('CSIDL_COMMON_PROGRAMS'), - 'IPython (Py%i.%i %i bit)' % (sys.version_info[0], - sys.version_info[1], - 8*tuple.__itemsize__)) + 'IPython %s' % pyver) + # Create IPython entry ... if not os.path.isdir(ip_start_menu): os.mkdir(ip_start_menu) directory_created(ip_start_menu) - + # Create .py and .bat files to make things available from # the Windows command line. Thanks to the Twisted project # for this logic! @@ -60,10 +84,10 @@ def install(): 'ipcontroller', 'ipengine', 'ipcluster', - 'irunner' + 'irunner', ] - programs = [ suffix(p) for p in programs ] - scripts = pjoin(prefix,'scripts') + programs = [suffix(p) for p in programs] + scripts = pjoin(sys.prefix, 'scripts') if not have_setuptools: # only create .bat files if we don't have setuptools for program in programs: @@ -73,66 +97,49 @@ def install(): # Create .py versions of the scripts shutil.copy(raw, py) # Create .bat files for each of the scripts - bat_file = file(bat,'w') + bat_file = file(bat, 'w') bat_file.write("@%s %s %%*" % (python, py)) bat_file.close() - # Now move onto setting the Start Menu up - ipybase = suffix(pjoin(scripts, 'ipython')) - if have_setuptools: - # let setuptools take care of the scripts: - ipybase = ipybase + '-script.py' - workdir = "%HOMEDRIVE%%HOMEPATH%" - - link = pjoin(ip_start_menu, 'IPython.lnk') - cmd = '"%s"' % ipybase - mkshortcut(python, 'IPython', link, cmd, workdir) - + # Create Start Menu shortcuts + iconpath = pjoin(scripts, 'ipython.ico') + mkshortcut(python, 'IPython', ip_start_menu, + arguments(scripts, 'ipython'), iconpath) + mkshortcut(python, 'IPython (pylab mode)', ip_start_menu, + arguments(scripts, 'ipython', '--pylab'), iconpath) + mkshortcut(python, 'IPython Controller', ip_start_menu, + arguments(scripts, 'ipcontroller'), iconpath) + mkshortcut(python, 'IPython Engine', ip_start_menu, + arguments(scripts, 'ipengine'), iconpath) + mkshortcut(pythonw, 'IPython Qt Console', ip_start_menu, + arguments(scripts, 'ipython', 'qtconsole'), iconpath) + mkshortcut(pythonw, 'IPython Qt Console (pylab mode)', ip_start_menu, + arguments(scripts, 'ipython', 'qtconsole --pylab=inline'), + iconpath) + + iconpath = pjoin(scripts, 'ipython_nb.ico') + mkshortcut(python, 'IPython Notebook', ip_start_menu, + arguments(scripts, 'ipython', 'notebook'), iconpath) + mkshortcut(python, 'IPython Notebook (pylab mode)', ip_start_menu, + arguments(scripts, 'ipython', 'notebook --pylab=inline'), + iconpath) + + try: + import IPython + mkshortcut(pythonw, 'IPython Documentation', ip_start_menu, + '-m webbrowser -t "http://ipython.org/ipython-doc/' + 'rel-%s/index.html"' % IPython.__version__, + iconpath='url.dll') + except Exception: + pass + # Disable pysh Start item until the profile restores functionality # Most of this code is in IPython/deathrow, and needs to be updated # to 0.11 APIs - - # link = pjoin(ip_start_menu, 'pysh.lnk') - # cmd = '"%s" profile=pysh --init' % ipybase - # mkshortcut(python, 'IPython (command prompt mode)', link, cmd, workdir) - - link = pjoin(ip_start_menu, 'pylab.lnk') - cmd = '"%s" --pylab' % ipybase - mkshortcut(python, 'IPython (pylab mode)', link, cmd, workdir) - - link = pjoin(ip_start_menu, 'ipcontroller.lnk') - cmdbase = suffix(pjoin(scripts, 'ipcontroller')) - if have_setuptools: - cmdbase += '-script.py' - cmd = '"%s"' % cmdbase - mkshortcut(python, 'IPython controller', link, cmd, workdir) - - link = pjoin(ip_start_menu, 'ipengine.lnk') - cmdbase = suffix(pjoin(scripts, 'ipengine')) - if have_setuptools: - cmdbase += '-script.py' - cmd = '"%s"' % cmdbase - mkshortcut(python, 'IPython engine', link, cmd, workdir) + #mkshortcut(python, 'IPython%s (command prompt mode)', ip_start_menu, + # arguments(scripts, 'ipython', 'profile=pysh --init')) + - link = pjoin(ip_start_menu, 'ipythonqt.lnk') - cmdbase = suffix(pjoin(scripts, 'ipython')) - if have_setuptools: - cmdbase += '-script.py' - cmd = '"%s" qtconsole' % cmdbase - mkshortcut(pythonw, 'IPython Qt Console', link, cmd, workdir) - - # FIXME: These below are commented out because we don't ship the html built - # docs anymore. We should make the shortcut to continue existing, but as a - # URL to the online the docs for the right version of IPython. The stable - # URLs have the pattern: - # http://ipython.org/ipython-doc/rel-X.Y.Z/html - # For IPython version X.Y.Z. - - ## # Create documentation shortcuts ... - ## t = prefix + r'\share\doc\ipython\manual\index.html' - ## f = ip_start_menu + r'\Manual in HTML.lnk' - ## mkshortcut(t,'IPython Manual - HTML-Format',f) - def remove(): """Routine to be run by the win32 installer with the -remove switch.""" pass @@ -144,8 +151,10 @@ if len(sys.argv) > 1: try: install() except OSError: - print("Failed to create Start Menu items, try running installer as administrator.", file=sys.stderr) + print("Failed to create Start Menu items, try running the" + " installer as administrator.", file=sys.stderr) elif sys.argv[1] == '-remove': remove() else: - print("Script was called with option %s" % sys.argv[1], file=sys.stderr) + print("Script was called with option %s" % sys.argv[1], + file=sys.stderr) diff --git a/setup.py b/setup.py index dc25a7f..4352ca9 100755 --- a/setup.py +++ b/setup.py @@ -177,7 +177,7 @@ from distutils.command.sdist import sdist from distutils.command.upload import upload class UploadWindowsInstallers(upload): - + 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') @@ -190,7 +190,7 @@ class UploadWindowsInstallers(upload): version=meta.get_version() ) self.files = os.path.join('dist', '%s.*.exe' % base) - + def run(self): for dist_file in glob(self.files): self.upload_file('bdist_wininst', 'any', dist_file) @@ -259,11 +259,13 @@ if 'setuptools' in sys.modules: ('sdist' in sys.argv or 'bdist_rpm' in sys.argv): print >> sys.stderr, "ERROR: bdist_wininst must be run alone. Exiting." sys.exit(1) + setup_args['data_files'].append( + ['Scripts', ('scripts/ipython.ico', 'scripts/ipython_nb.ico')]) setup_args['scripts'] = [pjoin('scripts','ipython_win_post_install.py')] setup_args['options'] = {"bdist_wininst": {"install_script": "ipython_win_post_install.py"}} - + if PY3: setuptools_extra_args['use_2to3'] = True # we try to make a 2.6, 2.7, and 3.1 to 3.3 python compatible code