Skip to content

Commit

Permalink
Version bump. Improved installation for windows
Browse files Browse the repository at this point in the history
  • Loading branch information
mathijs-dumon committed Nov 26, 2014
1 parent e86236d commit 220e295
Show file tree
Hide file tree
Showing 7 changed files with 336 additions and 41 deletions.
29 changes: 29 additions & 0 deletions PyXRDiss.iss
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
#define MyAppName "PyXRD"
#define MyAppVersion "0.6.2"

;
; Simple Inno Setup file that wraps the Python installer with PyXRD's automated
; script.
; This has been tested on a clean Windows 7 system.
;

[Setup]
PrivilegesRequired=Admin
AppName={#MyAppName}
AppVersion={#MyAppVersion}
DefaultDirName={pf}\{#MyAppName}
DefaultGroupName={#MyAppName}
OutputBaseFilename={#MyAppName}-{#MyAppVersion}-setup
Compression=lzma
SolidCompression=yes
DisableDirPage=yes
OutputDir="dist\"

[Files]
Source: ".\dist\python-2.7.8.msi"; DestDir: "{tmp}"; Flags: nocompression deleteafterinstall
Source: ".\win32_pyxrd_installation.py"; DestDir: "{tmp}"; Flags: nocompression deleteafterinstall

[Run]
Filename: "msiexec.exe"; Parameters: "/i ""{tmp}\python-2.7.8.msi""";
Filename: "C:\Python27\Python.exe"; Parameters: """{tmp}\win32_pyxrd_installation.py"" restarted";

2 changes: 1 addition & 1 deletion mvc/__version.py
Original file line number Diff line number Diff line change
Expand Up @@ -24,4 +24,4 @@
# Boston, MA 02110, USA.
# -------------------------------------------------------------------------

__version__ = "0.6.1"
__version__ = "0.6.2"
2 changes: 1 addition & 1 deletion pyxrd/__version.py
Original file line number Diff line number Diff line change
Expand Up @@ -5,4 +5,4 @@
# All rights reserved.
# Complete license can be found in the LICENSE file.

__version__ = "0.6.1"
__version__ = "0.6.2"
6 changes: 3 additions & 3 deletions setup.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@ def get_install_requires():
return [
'setuptools',
'numpy>=1.7',
'scipy>=0.10',
'matplotlib>=1.2.0',
'scipy>=0.14',
'matplotlib>=1.2.1',
]

def read(fname):
Expand All @@ -36,7 +36,7 @@ def read(fname):

license="BSD",
setup_requires=[ "setuptools_git >= 0.3", ],
scripts=['win32_post_install.py'],
scripts=['win32_pyxrd_post_install.py'],
packages=find_packages(exclude=["test.*", "test"]),
include_package_data=True,
entry_points={
Expand Down
36 changes: 0 additions & 36 deletions win32_post_install.py

This file was deleted.

212 changes: 212 additions & 0 deletions win32_pyxrd_installation.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,212 @@
#!/usr/bin/env python
# -*- coding: utf-8; mode: python; py-indent-offset: 4; indent-tabs-mode: nil -*-
# vim: fileencoding=utf-8 tabstop=4 expandtab shiftwidth=4

# (C) COPYRIGHT © Preston Landers 2010, © Mathijs Dumon 2014
# Released under the same license as Python 2.6.5

import sys, os, traceback, types, base64, tempfile
import urllib, subprocess
from Tkinter import *
import ttk
import time
import threading

base_text = "Installing dependencies and PyXRD, this may take a while ..."

def __install_hub(installers, root, label):
for title, urlpos, command, url in installers:
if url != "":
print "Downloading %s from %s ..." % (title, url)
def hook(count, block_size, total_size):
if total_size > 0:
progress = (100 * count * block_size / total_size)
progress = "%d %%" % progress
else:
progress = "? %"
label.set(base_text + "\nDownloading %s %s" % (title, progress))
label.set(base_text + "\nDownloading %s ..." % title)
try:
fname, headers = urllib.urlretrieve(url, reporthook=hook)
except IOError:
#Try again:
fname, headers = urllib.urlretrieve(url, reporthook=hook)
else:
fname = url

print "Installing %s ..." % title
label.set(base_text + "\nInstalling %s ..." % title)
if urlpos == -1:
command.append(fname)
else:
command.insert(urlpos, fname)

subprocess.call(command)

def install_others(root, label):
installers = [
("Setuptools", -1, [r"C:\Python27\python.exe",], r"https://bootstrap.pypa.io/ez_setup.py"),
("Pip", -1, [r"C:\Python27\Scripts\easy_install.exe", "pip"], ""),
("win32api", -1, [r"C:\Python27\Scripts\easy_install.exe",], "http://downloads.sourceforge.net/projects/pywin32/pywin32/Build%20219/pywin32-219.win32-py2.7.exe"),
("win32api", -1, [r"C:\Python27\python.exe", r"C:\Python27\Scripts\pywin32_postinstall.py", r"-install"], ""),
("PyGTK", 2, [r"msiexec", r"/i", r"/passive", r"ALLUSERS=1", r'TARGETDIR="C:\Python27"'], r"http://ftp.gnome.org/pub/GNOME/binaries/win32/pygtk/2.24/pygtk-all-in-one-2.24.2.win32-py2.7.msi"),
("Numpy", -1, [], r"http://sourceforge.net/projects/numpy/files/NumPy/1.7.0/numpy-1.7.0-win32-superpack-python2.7.exe/download"),
("Scipy", -1, [], r"http://sourceforge.net/projects/scipy/files/scipy/0.14.0/scipy-0.14.0-win32-superpack-python2.7.exe/download"),
("Pyparsing", -1, [r"C:\Python27\Scripts\easy_install.exe",], r"https://pypi.python.org/packages/any/p/pyparsing/pyparsing-2.0.3.win32-py2.7.exe#md5=1ca37c237b92ae033feec47cc00b7d14"),
("Matplotlib", -1, [r"C:\Python27\Scripts\easy_install.exe",], r"https://downloads.sourceforge.net/projects/matplotlib/matplotlib/matplotlib-1.2.1/matplotlib-1.2.1.win32-py2.7.exe"),
("PyXRD", -1, [r"C:\Python27\Scripts\easy_install.exe",], r"https://pypi.python.org/packages/any/P/PyXRD/PyXRD-0.6.2.win32-py2.7.exe"),
("PyXRD", -1, [r"C:\Python27\python.exe", r"C:\Python27\Scripts\win32_pyxrd_post_install.py -install"], ""),
]

__install_hub(installers, root, label)

root.destroy()

def create_progress_bar(root):
#Set the icon on the window:
icon = icon='''\
AAABAAIAEBAAAAAAIABoBAAAJgAAACAgAAAAACAAqBAAAI4EAAAoAAAAEAAAACAAAAABACAAAAAA
AEAEAAAAAAAAAAAAAAAAAAAAAAAA////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////AQAAABUAAABB
AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAABUA
AAALAAAAIQAAACFMTExLSUlJVQAAACEAAAAhAAAAIQAAACEAAAAhAAAAIQAAACEAAAAhAAAAIQAA
ACEAAAALeHh4O4aGhiv///8Bk5OTITw8PNO7u7sjd3d3Yf///wN6enpjdHR0VZmZmR1nZ2dXiIiI
WVFRUWV0dHRD////ATk5OYlQUFCRlZWVK35+fjMxMTHlUFBQaT4+PpdKSkq/Q0NDjysrK7tzc3OD
OTk5zTo6OpVSUlKRKSkpyWFhYVc5OTmJR0dHmS4uLt9RUVGtg4ODWUdHR8VsbGxNFhYW935+fkUr
Kyu7UlJSqUZGRq82NjaTWlpaW0JCQotFRUV3VlZWeVBQUMFJSUmp39/fF////wHg4OAbU1NTu42N
jUtYWFi5TExMp1hYWL1GRkaHU1NTf01NTcM4ODixkJCQGwAAAAsAAAAhAAAAIQAAACEAAAAhAAAA
IQAAACEAAAAhAAAAIQAAACEAAAAhAAAAIQAAACEAAAAhAAAAIQAAAAsAAAAVAAAAQQAAAEEAAABB
AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAAV////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////AQAA//8AAP//AAD//wAA//8AAP//AAD//wAA//8AAP//AAD//wAA
//8AAP//AAD//wAA//8AAP//AAD//wAA//8oAAAAIAAAAEAAAAABACAAAAAAAIAQAAAAAAAAAAAA
AAAAAAAAAAAA////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////AQAAAFEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACB
AAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEA
AACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAUf///wH///8BAAAAKQAAAEEAAABBAAAAQQAA
AEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAA
QQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAAAp////Af///wH///8B
////Af///wH///8B////Af///wGGhoarZmZmoaqqqjP///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////AZOTk4NDQ0PXXFxcwf///wP///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8Xampq04aGhqv///8B////Af///wH///8B////AVpaWrMK
Cgr/ra2tVdHR0TN0dHTPfHx8s////wX///8JdHR0vYCAgMuzs7N/Tk5O0ZmZmXP///8Bi4uLjVBQ
UNHGxsaLYWFh1U9PT89VVVXBYGBgrZubm13///8B////Af///xknJyf7V1dXvf///wH///8B////
Af///wG0tLQzHBwc9xwcHPtnZ2el////AX5+fpEHBwf/kpKSiYWFhZUHBwf/jo6Of4iIiHkAAAD/
gYGBf9PT0x03NzfpRUVF3fDw8DMcHBz/QkJC2V5eXrU1NTXtDQ0N/YeHh33///8B////GScnJ/s8
PDzfZGRkpYWFhX3Dw8Mv////AW1tbZslJSXzgYGBsTQ0NOnm5uYV////B1BQUMkrKyvvHh4e82Nj
Y7n///8DiIiIeQAAAP94eHi1WFhYvwwMDP2Pj49z6+vrJxwcHP9aWlq1////Abq6ukMVFRX7TExM
3f///wH///8ZJycn+zExMedUVFTDGxsb80dHR9/Y2NgbODg46V1dXa+oqKhVBgYG/4qKinf///8B
n5+fZQQEBP8ODg7/u7u7U////wGIiIh5AAAA/zw8POcvLy/xVVVV26ampjnr6+snHBwc/1paWrX/
//8B////AU5OTtkwMDD1////Ef///xknJyf7V1dXvf///wFnZ2epBQUF/6qqqrUbGxv/o6OjX///
/wVRUVHdaGhoxf///wdOTk7HKysr7x4eHvNiYmK7////A4iIiHkAAAD/gYGBf7m5uU0LCwv/b29v
qevr6yccHBz/Wlpatf///wG6urpZDg4O/VFRUdf///8B////GScnJ/s5OTnhXFxcsSQkJO06Ojrl
4eHhK97e3i////8D////AeHh4SPi4uIte3t7jQYGBv+Pj4+HhYWFlQcHB/+KioqBiIiIeQAAAP9Z
WVnJU1NTywAAAP+Hh4eN6+vrJxwcHP82NjbhTU1NyxoaGvsbGxv1kJCQa////wH///8TcXFxvVlZ
WblaWlq3dHR0j6ampkX///8B////Af///wH///8B////Ad3d3R99fX25enp6pf///wPm5uYLd3d3
r4mJibetra1rWVlZuVlZWblfX1+rd3d3fcXFxRft7e0daWlpvVpaWrdhYWGpcHBwlaurqz3///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////AQAAACkAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAA
QQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAQQAAAEEAAABB
AAAAQQAAAEEAAABBAAAAQQAAAEEAAABBAAAAKf///wH///8BAAAAUQAAAIEAAACBAAAAgQAAAIEA
AACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAA
AIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAACBAAAAgQAAAIEAAABR////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B
////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH/
//8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af//
/wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////Af///wH///8B////
AQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAAAAAAAAAAAA
'''
fd, icon_fname= tempfile.mkstemp(suffix=".png")
with os.fdopen(fd) as f:
pass # just close this one
with open(icon_fname, "wb") as f:
f.write(base64.b64decode(icon))
root.wm_iconbitmap(icon_fname)
os.remove(icon_fname)

# Pack bar and label:
ft = ttk.Frame(height=100, width=300)
ft.grid(padx=20, pady=40)
v = StringVar()
v.set(base_text)
label = Label(ft, textvariable=v)
label.pack(expand=True, fill=BOTH, side=TOP)
pb_hD = ttk.Progressbar(ft, orient='horizontal', mode='indeterminate')
pb_hD.pack(expand=True, fill=BOTH, side=BOTTOM)
pb_hD.start(50)

#Return the label var:
return v

def run_install_with_gui(callback):
root = Tk()
root.wm_title("PyXRD Automated installation")
label = create_progress_bar(root)
t1 = threading.Thread(target=callback, args=(root, label))
t1.start()
root.mainloop()
t1.join()

def runAsAdmin(commands):
command = ["runas.exe", "/savecred", "/user:administrator", " ".join(commands)]
subprocess.call(command)

def main():

if len(sys.argv) == 1:
print "Executing with elevated privilges"
args = [sys.executable] + sys.argv + ["restarted"]
runAsAdmin(args)
else:
run_install_with_gui(install_others)
print "Finished installing!"

if __name__ == "__main__":
main()

0 comments on commit 220e295

Please sign in to comment.