[Contrib] add windows installer
This commit is contained in:
parent
13734fa0d7
commit
72a4de7e30
9 changed files with 636 additions and 0 deletions
5
contrib/windows-install/HOW_TO.txt
Normal file
5
contrib/windows-install/HOW_TO.txt
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
1. Replace weboob egg file
|
||||||
|
|
||||||
|
2. update settings.cmd
|
||||||
|
|
||||||
|
3. run create-exe-setup-weboob.bat
|
||||||
BIN
contrib/windows-install/ICON/weboobtxt.ico
Normal file
BIN
contrib/windows-install/ICON/weboobtxt.ico
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 361 KiB |
109
contrib/windows-install/convertPNG2ICO.py
Normal file
109
contrib/windows-install/convertPNG2ICO.py
Normal file
|
|
@ -0,0 +1,109 @@
|
||||||
|
#!C:\Python27\python.exe
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
#
|
||||||
|
# windows icon file(.ico) and cursor file(.cur) generator/writer from RGB(a) array
|
||||||
|
#
|
||||||
|
# NOTICE: one image per file *only*, 16x16 or 32x32 or 48x48 or 64x64 *only*
|
||||||
|
# Support 24 bit & 32 bit(RGB + alpha)
|
||||||
|
#
|
||||||
|
# Copyright 2009 ( http://creativecommons.org/licenses/by-nc-sa/2.5/cn/ )
|
||||||
|
#
|
||||||
|
# About Author
|
||||||
|
# Blog( http://2maomao.com/blog/ )
|
||||||
|
# Website( http://fayaa.com/tool/favicon/ )
|
||||||
|
# Contact me via email
|
||||||
|
#
|
||||||
|
# References:
|
||||||
|
# [1] http://en.wikipedia.org/wiki/Ico_Format
|
||||||
|
# [2] http://en.wikipedia.org/wiki/Windows_and_OS/2_bitmap
|
||||||
|
# [3] http://support.microsoft.com/kb/83034
|
||||||
|
# [4] http://msdn.microsoft.com/en-us/library/ms997538(loband).aspx
|
||||||
|
# [5] http://www.martinreddy.net/gfx/2d/BMP.txt
|
||||||
|
# [6] http://code.google.com/p/casadebender/source/browse/python/PIL/Win32IconImagePlugin.py
|
||||||
|
# [7] http://www.osphp.com.cn/read.php/290.htm
|
||||||
|
|
||||||
|
from PIL import Image
|
||||||
|
import sys
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
# data: a size*size of (r,g,b,t) tuples, t for tansparency(if True)
|
||||||
|
# (r,g,b,a) if bpp is 32
|
||||||
|
# size: could be 16 or 32 or 48 or 64, other value NOT supported
|
||||||
|
# bpp: bits per pixel, could *only* be 24 or 32!
|
||||||
|
# return: an "array" of BYTES which, if write to file, is a size*size ico file
|
||||||
|
def genico(data, size=16, bpp=24):
|
||||||
|
from array import array
|
||||||
|
a = array('B')
|
||||||
|
#header(ref1&5)
|
||||||
|
a.extend((0,0, 1,0, 1,0)) #reserved*2, icon,0, 1 image per-file,0
|
||||||
|
#directory(ref1&5&7)
|
||||||
|
imglen = 40+size*(size*3 + (size+16)/32*32/8) #image-part length in bytes
|
||||||
|
#!hack! AND bits align to 32 bits per line
|
||||||
|
#!shit! MSDN says nothing about this
|
||||||
|
if bpp == 32:
|
||||||
|
imglen += size*size #1 more byte for alpha value of each pixel
|
||||||
|
a.extend((size,size, 0,0, 1,0, bpp,0)) #w,h, reserved*2, 1plane*2, bpp*2
|
||||||
|
a.extend((imglen&0xff,imglen>>8,0,0, 22,0,0,0)) #bitmap-size*4,22B-offset*4
|
||||||
|
#image BITMAPINFOHEADER(ref5)
|
||||||
|
a.extend((40,0,0,0)) #size of data(contains header)*4
|
||||||
|
a.extend((size,0,0,0, size*2,0,0,0))#w*4, (h+h)*4 (!shit hack! XOR+AND)
|
||||||
|
a.extend((1,0, bpp,0, 0,0,0,0, 0,0,0,0)) #1 plane*2, 24 bits*2, no compress*4, rawBMPsize(no compress so 0)*4
|
||||||
|
a.extend((0,1,0,0, 0,1,0,0)) #horizontal*4/vertical*4 resolution pixels/meter(WTF?)
|
||||||
|
a.extend((0,0,0,0, 0,0,0,0)) #colors fully used, all are important
|
||||||
|
#!no planes
|
||||||
|
#image content(ref1&5), XOR+AND bitmaps
|
||||||
|
AND = array('B')
|
||||||
|
vand = 0
|
||||||
|
vcnt = 0
|
||||||
|
#remember that bitmap format is reversed in y-axis
|
||||||
|
for x in range(size-1,-1,-1):
|
||||||
|
for y in range(0, size):
|
||||||
|
b,g,r,t_or_a = data[y*size+x]
|
||||||
|
a.extend((r,g,b))
|
||||||
|
if bpp == 32:
|
||||||
|
a.append(t_or_a)
|
||||||
|
vcnt+=1
|
||||||
|
vand<<=1
|
||||||
|
if (bpp==24 and t_or_a) or (bpp==32 and t_or_a<128):
|
||||||
|
vand |= 1
|
||||||
|
if vcnt==8:
|
||||||
|
AND.append(vand)
|
||||||
|
vcnt=0
|
||||||
|
vand=0
|
||||||
|
#!hack! AND bits align to 32 bits per line, !shit! MSDN says nothing about this
|
||||||
|
AND.extend([0] * ((32-size%32)%32/8))
|
||||||
|
a.extend(AND)
|
||||||
|
return a
|
||||||
|
|
||||||
|
# x,y indicate the hotspot position
|
||||||
|
# simply set the type/hotspot(x&y) after generates the icon
|
||||||
|
def gencur(data, size=16, bpp=24, x=0, y=0):
|
||||||
|
a = genico(data, size, bpp)
|
||||||
|
a[3], a[10], a[12] = 2, x, y
|
||||||
|
return a
|
||||||
|
|
||||||
|
#C:\Python27\Lib\site-packages\weboob-0.g-py2.7.egg\share\icons\hicolor\64x64\apps
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
if len(sys.argv) == 2:
|
||||||
|
png_file = sys.argv[1]
|
||||||
|
|
||||||
|
f, e = os.path.splitext(png_file)
|
||||||
|
ico_file = f + ".ico"
|
||||||
|
|
||||||
|
im = Image.open(r"%s" % png_file)
|
||||||
|
wh = 64
|
||||||
|
|
||||||
|
rgba = im.convert("RGBA")
|
||||||
|
|
||||||
|
data = []
|
||||||
|
for i in range(wh):
|
||||||
|
for j in range(wh):
|
||||||
|
data.append(rgba.getpixel((i,j)))
|
||||||
|
|
||||||
|
|
||||||
|
icoflow = genico(data, wh, 32)
|
||||||
|
_file = open(ico_file, "wb")
|
||||||
|
icoflow.tofile(_file)
|
||||||
|
_file.close()
|
||||||
3
contrib/windows-install/create-exe-setup-weboob.bat
Normal file
3
contrib/windows-install/create-exe-setup-weboob.bat
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
@echo off
|
||||||
|
call settings.cmd
|
||||||
|
"Bat_To_Exe_Converter.exe" -bat "setup-weboob.bat" -save "setup-weboob-%WEBOOB_VERSION%.exe" -icon "ICON\weboobtxt.ico" -include "Bat_To_Exe_Converter.exe" -include "wget-1.11.4-1-setup.exe" -include "weboob-%WEBOOB_VERSION%-py2.7.egg" -include "convertPNG2ICO.py" -include "ez_setup.py" -include "settings.cmd"
|
||||||
370
contrib/windows-install/ez_setup.py
Normal file
370
contrib/windows-install/ez_setup.py
Normal file
|
|
@ -0,0 +1,370 @@
|
||||||
|
#!python
|
||||||
|
"""Bootstrap setuptools installation
|
||||||
|
|
||||||
|
If you want to use setuptools in your package's setup.py, just include this
|
||||||
|
file in the same directory with it, and add this to the top of your setup.py::
|
||||||
|
|
||||||
|
from ez_setup import use_setuptools
|
||||||
|
use_setuptools()
|
||||||
|
|
||||||
|
If you want to require a specific version of setuptools, set a download
|
||||||
|
mirror, or use an alternate download directory, you can do so by supplying
|
||||||
|
the appropriate options to ``use_setuptools()``.
|
||||||
|
|
||||||
|
This file can also be run as a script to install or upgrade setuptools.
|
||||||
|
"""
|
||||||
|
import os
|
||||||
|
import shutil
|
||||||
|
import sys
|
||||||
|
import tempfile
|
||||||
|
import tarfile
|
||||||
|
import optparse
|
||||||
|
import subprocess
|
||||||
|
import platform
|
||||||
|
|
||||||
|
from distutils import log
|
||||||
|
|
||||||
|
try:
|
||||||
|
from site import USER_SITE
|
||||||
|
except ImportError:
|
||||||
|
USER_SITE = None
|
||||||
|
|
||||||
|
DEFAULT_VERSION = "1.1.6"
|
||||||
|
DEFAULT_URL = "https://pypi.python.org/packages/source/s/setuptools/"
|
||||||
|
|
||||||
|
def _python_cmd(*args):
|
||||||
|
args = (sys.executable,) + args
|
||||||
|
return subprocess.call(args) == 0
|
||||||
|
|
||||||
|
def _check_call_py24(cmd, *args, **kwargs):
|
||||||
|
res = subprocess.call(cmd, *args, **kwargs)
|
||||||
|
class CalledProcessError(Exception):
|
||||||
|
pass
|
||||||
|
if not res == 0:
|
||||||
|
msg = "Command '%s' return non-zero exit status %d" % (cmd, res)
|
||||||
|
raise CalledProcessError(msg)
|
||||||
|
vars(subprocess).setdefault('check_call', _check_call_py24)
|
||||||
|
|
||||||
|
def _install(tarball, install_args=()):
|
||||||
|
# extracting the tarball
|
||||||
|
tmpdir = tempfile.mkdtemp()
|
||||||
|
log.warn('Extracting in %s', tmpdir)
|
||||||
|
old_wd = os.getcwd()
|
||||||
|
try:
|
||||||
|
os.chdir(tmpdir)
|
||||||
|
tar = tarfile.open(tarball)
|
||||||
|
_extractall(tar)
|
||||||
|
tar.close()
|
||||||
|
|
||||||
|
# going in the directory
|
||||||
|
subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
|
||||||
|
os.chdir(subdir)
|
||||||
|
log.warn('Now working in %s', subdir)
|
||||||
|
|
||||||
|
# installing
|
||||||
|
log.warn('Installing Setuptools')
|
||||||
|
if not _python_cmd('setup.py', 'install', *install_args):
|
||||||
|
log.warn('Something went wrong during the installation.')
|
||||||
|
log.warn('See the error message above.')
|
||||||
|
# exitcode will be 2
|
||||||
|
return 2
|
||||||
|
finally:
|
||||||
|
os.chdir(old_wd)
|
||||||
|
shutil.rmtree(tmpdir)
|
||||||
|
|
||||||
|
|
||||||
|
def _build_egg(egg, tarball, to_dir):
|
||||||
|
# extracting the tarball
|
||||||
|
tmpdir = tempfile.mkdtemp()
|
||||||
|
log.warn('Extracting in %s', tmpdir)
|
||||||
|
old_wd = os.getcwd()
|
||||||
|
try:
|
||||||
|
os.chdir(tmpdir)
|
||||||
|
tar = tarfile.open(tarball)
|
||||||
|
_extractall(tar)
|
||||||
|
tar.close()
|
||||||
|
|
||||||
|
# going in the directory
|
||||||
|
subdir = os.path.join(tmpdir, os.listdir(tmpdir)[0])
|
||||||
|
os.chdir(subdir)
|
||||||
|
log.warn('Now working in %s', subdir)
|
||||||
|
|
||||||
|
# building an egg
|
||||||
|
log.warn('Building a Setuptools egg in %s', to_dir)
|
||||||
|
_python_cmd('setup.py', '-q', 'bdist_egg', '--dist-dir', to_dir)
|
||||||
|
|
||||||
|
finally:
|
||||||
|
os.chdir(old_wd)
|
||||||
|
shutil.rmtree(tmpdir)
|
||||||
|
# returning the result
|
||||||
|
log.warn(egg)
|
||||||
|
if not os.path.exists(egg):
|
||||||
|
raise IOError('Could not build the egg.')
|
||||||
|
|
||||||
|
|
||||||
|
def _do_download(version, download_base, to_dir, download_delay):
|
||||||
|
egg = os.path.join(to_dir, 'setuptools-%s-py%d.%d.egg'
|
||||||
|
% (version, sys.version_info[0], sys.version_info[1]))
|
||||||
|
if not os.path.exists(egg):
|
||||||
|
tarball = download_setuptools(version, download_base,
|
||||||
|
to_dir, download_delay)
|
||||||
|
_build_egg(egg, tarball, to_dir)
|
||||||
|
sys.path.insert(0, egg)
|
||||||
|
|
||||||
|
# Remove previously-imported pkg_resources if present (see
|
||||||
|
# https://bitbucket.org/pypa/setuptools/pull-request/7/ for details).
|
||||||
|
if 'pkg_resources' in sys.modules:
|
||||||
|
del sys.modules['pkg_resources']
|
||||||
|
|
||||||
|
import setuptools
|
||||||
|
setuptools.bootstrap_install_from = egg
|
||||||
|
|
||||||
|
|
||||||
|
def use_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
|
||||||
|
to_dir=os.curdir, download_delay=15):
|
||||||
|
# making sure we use the absolute path
|
||||||
|
to_dir = os.path.abspath(to_dir)
|
||||||
|
was_imported = 'pkg_resources' in sys.modules or \
|
||||||
|
'setuptools' in sys.modules
|
||||||
|
try:
|
||||||
|
import pkg_resources
|
||||||
|
except ImportError:
|
||||||
|
return _do_download(version, download_base, to_dir, download_delay)
|
||||||
|
try:
|
||||||
|
pkg_resources.require("setuptools>=" + version)
|
||||||
|
return
|
||||||
|
except pkg_resources.VersionConflict:
|
||||||
|
e = sys.exc_info()[1]
|
||||||
|
if was_imported:
|
||||||
|
sys.stderr.write(
|
||||||
|
"The required version of setuptools (>=%s) is not available,\n"
|
||||||
|
"and can't be installed while this script is running. Please\n"
|
||||||
|
"install a more recent version first, using\n"
|
||||||
|
"'easy_install -U setuptools'."
|
||||||
|
"\n\n(Currently using %r)\n" % (version, e.args[0]))
|
||||||
|
sys.exit(2)
|
||||||
|
else:
|
||||||
|
del pkg_resources, sys.modules['pkg_resources'] # reload ok
|
||||||
|
return _do_download(version, download_base, to_dir,
|
||||||
|
download_delay)
|
||||||
|
except pkg_resources.DistributionNotFound:
|
||||||
|
return _do_download(version, download_base, to_dir,
|
||||||
|
download_delay)
|
||||||
|
|
||||||
|
def download_file_powershell(url, target):
|
||||||
|
"""
|
||||||
|
Download the file at url to target using Powershell (which will validate
|
||||||
|
trust). Raise an exception if the command cannot complete.
|
||||||
|
"""
|
||||||
|
target = os.path.abspath(target)
|
||||||
|
cmd = [
|
||||||
|
'powershell',
|
||||||
|
'-Command',
|
||||||
|
"(new-object System.Net.WebClient).DownloadFile(%(url)r, %(target)r)" % vars(),
|
||||||
|
]
|
||||||
|
subprocess.check_call(cmd)
|
||||||
|
|
||||||
|
def has_powershell():
|
||||||
|
if platform.system() != 'Windows':
|
||||||
|
return False
|
||||||
|
cmd = ['powershell', '-Command', 'echo test']
|
||||||
|
devnull = open(os.path.devnull, 'wb')
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
finally:
|
||||||
|
devnull.close()
|
||||||
|
return True
|
||||||
|
|
||||||
|
download_file_powershell.viable = has_powershell
|
||||||
|
|
||||||
|
def download_file_curl(url, target):
|
||||||
|
cmd = ['curl', url, '--silent', '--output', target]
|
||||||
|
subprocess.check_call(cmd)
|
||||||
|
|
||||||
|
def has_curl():
|
||||||
|
cmd = ['curl', '--version']
|
||||||
|
devnull = open(os.path.devnull, 'wb')
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
finally:
|
||||||
|
devnull.close()
|
||||||
|
return True
|
||||||
|
|
||||||
|
download_file_curl.viable = has_curl
|
||||||
|
|
||||||
|
def download_file_wget(url, target):
|
||||||
|
cmd = ['wget', url, '--quiet', '--output-document', target]
|
||||||
|
subprocess.check_call(cmd)
|
||||||
|
|
||||||
|
def has_wget():
|
||||||
|
cmd = ['wget', '--version']
|
||||||
|
devnull = open(os.path.devnull, 'wb')
|
||||||
|
try:
|
||||||
|
try:
|
||||||
|
subprocess.check_call(cmd, stdout=devnull, stderr=devnull)
|
||||||
|
except:
|
||||||
|
return False
|
||||||
|
finally:
|
||||||
|
devnull.close()
|
||||||
|
return False
|
||||||
|
|
||||||
|
download_file_wget.viable = has_wget
|
||||||
|
|
||||||
|
def download_file_insecure(url, target):
|
||||||
|
"""
|
||||||
|
Use Python to download the file, even though it cannot authenticate the
|
||||||
|
connection.
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
from urllib.request import urlopen
|
||||||
|
except ImportError:
|
||||||
|
from urllib2 import urlopen
|
||||||
|
src = dst = None
|
||||||
|
try:
|
||||||
|
src = urlopen(url)
|
||||||
|
# Read/write all in one block, so we don't create a corrupt file
|
||||||
|
# if the download is interrupted.
|
||||||
|
data = src.read()
|
||||||
|
dst = open(target, "wb")
|
||||||
|
dst.write(data)
|
||||||
|
finally:
|
||||||
|
if src:
|
||||||
|
src.close()
|
||||||
|
if dst:
|
||||||
|
dst.close()
|
||||||
|
|
||||||
|
download_file_insecure.viable = lambda: True
|
||||||
|
|
||||||
|
def get_best_downloader():
|
||||||
|
downloaders = [
|
||||||
|
download_file_powershell,
|
||||||
|
download_file_curl,
|
||||||
|
download_file_wget,
|
||||||
|
download_file_insecure,
|
||||||
|
]
|
||||||
|
|
||||||
|
for dl in downloaders:
|
||||||
|
if dl.viable():
|
||||||
|
return dl
|
||||||
|
|
||||||
|
def download_setuptools(version=DEFAULT_VERSION, download_base=DEFAULT_URL,
|
||||||
|
to_dir=os.curdir, delay=15,
|
||||||
|
downloader_factory=get_best_downloader):
|
||||||
|
"""Download setuptools from a specified location and return its filename
|
||||||
|
|
||||||
|
`version` should be a valid setuptools version number that is available
|
||||||
|
as an egg for download under the `download_base` URL (which should end
|
||||||
|
with a '/'). `to_dir` is the directory where the egg will be downloaded.
|
||||||
|
`delay` is the number of seconds to pause before an actual download
|
||||||
|
attempt.
|
||||||
|
|
||||||
|
``downloader_factory`` should be a function taking no arguments and
|
||||||
|
returning a function for downloading a URL to a target.
|
||||||
|
"""
|
||||||
|
# making sure we use the absolute path
|
||||||
|
to_dir = os.path.abspath(to_dir)
|
||||||
|
tgz_name = "setuptools-%s.tar.gz" % version
|
||||||
|
url = download_base + tgz_name
|
||||||
|
saveto = os.path.join(to_dir, tgz_name)
|
||||||
|
if not os.path.exists(saveto): # Avoid repeated downloads
|
||||||
|
log.warn("Downloading %s", url)
|
||||||
|
downloader = downloader_factory()
|
||||||
|
downloader(url, saveto)
|
||||||
|
return os.path.realpath(saveto)
|
||||||
|
|
||||||
|
|
||||||
|
def _extractall(self, path=".", members=None):
|
||||||
|
"""Extract all members from the archive to the current working
|
||||||
|
directory and set owner, modification time and permissions on
|
||||||
|
directories afterwards. `path' specifies a different directory
|
||||||
|
to extract to. `members' is optional and must be a subset of the
|
||||||
|
list returned by getmembers().
|
||||||
|
"""
|
||||||
|
import copy
|
||||||
|
import operator
|
||||||
|
from tarfile import ExtractError
|
||||||
|
directories = []
|
||||||
|
|
||||||
|
if members is None:
|
||||||
|
members = self
|
||||||
|
|
||||||
|
for tarinfo in members:
|
||||||
|
if tarinfo.isdir():
|
||||||
|
# Extract directories with a safe mode.
|
||||||
|
directories.append(tarinfo)
|
||||||
|
tarinfo = copy.copy(tarinfo)
|
||||||
|
tarinfo.mode = 448 # decimal for oct 0700
|
||||||
|
self.extract(tarinfo, path)
|
||||||
|
|
||||||
|
# Reverse sort directories.
|
||||||
|
if sys.version_info < (2, 4):
|
||||||
|
def sorter(dir1, dir2):
|
||||||
|
return cmp(dir1.name, dir2.name)
|
||||||
|
directories.sort(sorter)
|
||||||
|
directories.reverse()
|
||||||
|
else:
|
||||||
|
directories.sort(key=operator.attrgetter('name'), reverse=True)
|
||||||
|
|
||||||
|
# Set correct owner, mtime and filemode on directories.
|
||||||
|
for tarinfo in directories:
|
||||||
|
dirpath = os.path.join(path, tarinfo.name)
|
||||||
|
try:
|
||||||
|
self.chown(tarinfo, dirpath)
|
||||||
|
self.utime(tarinfo, dirpath)
|
||||||
|
self.chmod(tarinfo, dirpath)
|
||||||
|
except ExtractError:
|
||||||
|
e = sys.exc_info()[1]
|
||||||
|
if self.errorlevel > 1:
|
||||||
|
raise
|
||||||
|
else:
|
||||||
|
self._dbg(1, "tarfile: %s" % e)
|
||||||
|
|
||||||
|
|
||||||
|
def _build_install_args(options):
|
||||||
|
"""
|
||||||
|
Build the arguments to 'python setup.py install' on the setuptools package
|
||||||
|
"""
|
||||||
|
install_args = []
|
||||||
|
if options.user_install:
|
||||||
|
if sys.version_info < (2, 6):
|
||||||
|
log.warn("--user requires Python 2.6 or later")
|
||||||
|
raise SystemExit(1)
|
||||||
|
install_args.append('--user')
|
||||||
|
return install_args
|
||||||
|
|
||||||
|
def _parse_args():
|
||||||
|
"""
|
||||||
|
Parse the command line for options
|
||||||
|
"""
|
||||||
|
parser = optparse.OptionParser()
|
||||||
|
parser.add_option(
|
||||||
|
'--user', dest='user_install', action='store_true', default=False,
|
||||||
|
help='install in user site package (requires Python 2.6 or later)')
|
||||||
|
parser.add_option(
|
||||||
|
'--download-base', dest='download_base', metavar="URL",
|
||||||
|
default=DEFAULT_URL,
|
||||||
|
help='alternative URL from where to download the setuptools package')
|
||||||
|
parser.add_option(
|
||||||
|
'--insecure', dest='downloader_factory', action='store_const',
|
||||||
|
const=lambda: download_file_insecure, default=get_best_downloader,
|
||||||
|
help='Use internal, non-validating downloader'
|
||||||
|
)
|
||||||
|
options, args = parser.parse_args()
|
||||||
|
# positional arguments are ignored
|
||||||
|
return options
|
||||||
|
|
||||||
|
def main(version=DEFAULT_VERSION):
|
||||||
|
"""Install or upgrade setuptools and EasyInstall"""
|
||||||
|
options = _parse_args()
|
||||||
|
tarball = download_setuptools(download_base=options.download_base,
|
||||||
|
downloader_factory=options.downloader_factory)
|
||||||
|
return _install(tarball, _build_install_args(options))
|
||||||
|
|
||||||
|
if __name__ == '__main__':
|
||||||
|
sys.exit(main())
|
||||||
3
contrib/windows-install/settings.cmd
Normal file
3
contrib/windows-install/settings.cmd
Normal file
|
|
@ -0,0 +1,3 @@
|
||||||
|
set WEBOOB_VERSION=0.g
|
||||||
|
set WEBOOB=weboob-0.g-py2.7.egg
|
||||||
|
set LIST_APPLIQUATIONS_QT=qboobmsg qcineoob qcookboob qflatboob qhandjoob qhavedate qvideoob qwebcontentedit weboob-config-qt
|
||||||
146
contrib/windows-install/setup-weboob.bat
Normal file
146
contrib/windows-install/setup-weboob.bat
Normal file
|
|
@ -0,0 +1,146 @@
|
||||||
|
@echo off
|
||||||
|
|
||||||
|
call settings.cmd
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 0.Set proxy
|
||||||
|
set/P HTTP_PROXY=Enter HTTP_PROXY if needed :
|
||||||
|
set/P HTTPS_PROXY=Enter HTTPS_PROXY if needed :
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 1.GNU/WGET Installation
|
||||||
|
for %%i in (wget.exe) do set wget=%%~$PATH:i
|
||||||
|
if not defined wget (
|
||||||
|
wget-1.11.4-1-setup.exe
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 2.Check Python 2.7 Installation
|
||||||
|
set KEY_NAME=HKLM\Software\Python\PythonCore\2.7\InstallPath
|
||||||
|
REG QUERY %KEY_NAME% > nul || (
|
||||||
|
echo 2.1 Download Python 2.7
|
||||||
|
wget -o python_donwload http://www.python.org/ftp/python/2.7.5/python-2.7.5.msi
|
||||||
|
|
||||||
|
echo 2.2 Setup Python 2.7
|
||||||
|
python-2.7.5.msi
|
||||||
|
|
||||||
|
del python-2.7.5.msi
|
||||||
|
del python_donwload
|
||||||
|
)
|
||||||
|
|
||||||
|
for /F "tokens=4" %%A IN ('REG QUERY %KEY_NAME%') do (
|
||||||
|
set PythonPath=%%A
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 3.Check PyQt4 Installation
|
||||||
|
for %%i in (pyuic4.bat) do set qt=%%~$PATH:i
|
||||||
|
if not defined qt (
|
||||||
|
|
||||||
|
echo 3.1 Download PyQt4
|
||||||
|
wget -o qt_download http://downloads.sourceforge.net/project/pyqt/PyQt4/PyQt-4.10.3/PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x32.exe?r=http%3A%2F%2Fsourceforge.net%2Fprojects%2Fpyqt%2Ffiles%2FPyQt4%2FPyQt-4.10.3%2F&ts=1380890340&use_mirror=garr
|
||||||
|
|
||||||
|
echo 3.2 Setup PyQt4
|
||||||
|
PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x32.exe
|
||||||
|
|
||||||
|
del PyQt4-4.10.3-gpl-Py2.7-Qt4.8.5-x32.exe
|
||||||
|
del qt_download
|
||||||
|
)
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 4.Check EasyInstall
|
||||||
|
if exist "%PythonPath%Scripts\easy_install.exe" (
|
||||||
|
goto :InstallWeboobDependances
|
||||||
|
) else (
|
||||||
|
|
||||||
|
echo 4.1 Setup setuptools
|
||||||
|
%PythonPath%python.exe ez_setup.py || goto :InstallFailed
|
||||||
|
|
||||||
|
del setuptools-1.1.6.tar.gz
|
||||||
|
|
||||||
|
goto :InstallWeboobDependances
|
||||||
|
)
|
||||||
|
|
||||||
|
:InstallWeboobDependances
|
||||||
|
echo.
|
||||||
|
echo 5.Install Weboob Dependances
|
||||||
|
echo.
|
||||||
|
echo -- cssselect
|
||||||
|
%PythonPath%Scripts\easy_install.exe cssselect || goto :InstallFailed
|
||||||
|
echo.
|
||||||
|
echo -- lxml
|
||||||
|
%PythonPath%Scripts\easy_install.exe lxml || goto :InstallFailed
|
||||||
|
echo.
|
||||||
|
echo -- dateutils
|
||||||
|
%PythonPath%Scripts\easy_install.exe dateutils || goto :InstallFailed
|
||||||
|
echo.
|
||||||
|
echo -- pyyaml
|
||||||
|
%PythonPath%Scripts\easy_install.exe pyyaml || goto :InstallFailed
|
||||||
|
echo.
|
||||||
|
echo -- html2text
|
||||||
|
%PythonPath%Scripts\easy_install.exe html2text || goto :InstallFailed
|
||||||
|
echo.
|
||||||
|
echo -- mechanize
|
||||||
|
%PythonPath%Scripts\easy_install.exe mechanize || goto :InstallFailed
|
||||||
|
echo.
|
||||||
|
echo -- gdata
|
||||||
|
%PythonPath%Scripts\easy_install.exe gdata || goto :InstallFailed
|
||||||
|
echo.
|
||||||
|
echo -- pillow
|
||||||
|
%PythonPath%Scripts\easy_install.exe pillow || goto :InstallFailed
|
||||||
|
|
||||||
|
echo.
|
||||||
|
echo 6.Install WeBoob
|
||||||
|
%PythonPath%Scripts\easy_install.exe %WEBOOB% || goto :InstallFailed
|
||||||
|
|
||||||
|
set StartupFolder=%AppData%\Microsoft\Windows\Start Menu\Programs
|
||||||
|
if exist "%StartupFolder%" Goto :FoundStartup
|
||||||
|
set StartupFolder=%UserProfile%\Start Menu\Programs
|
||||||
|
if exist "%StartupFolder%" Goto :FoundStartup
|
||||||
|
echo Cannot find Startup folder.
|
||||||
|
echo do not create launchers
|
||||||
|
goto :InstallSucceed
|
||||||
|
|
||||||
|
:FoundStartup
|
||||||
|
if exist "%StartupFolder%\Weboob" (
|
||||||
|
goto :CreateLauncher
|
||||||
|
) else (
|
||||||
|
md "%StartupFolder%\Weboob"
|
||||||
|
goto :CreateLauncher
|
||||||
|
)
|
||||||
|
|
||||||
|
:CreateLauncher
|
||||||
|
::for /f "delims=. tokens=1" %%i in ('dir /b "%PythonPath%\Lib\site-packages\%WEBOOB%\share\icons\hicolor\64x64\apps\q*.png"') do (
|
||||||
|
for %%i in (%LIST_APPLIQUATIONS_QT%) do (
|
||||||
|
echo Process %%i
|
||||||
|
|
||||||
|
(
|
||||||
|
echo @echo off
|
||||||
|
echo start %PythonPath%pythonw.exe %PythonPath%Scripts\%%i
|
||||||
|
) > %%i.bat
|
||||||
|
|
||||||
|
%PythonPath%python.exe convertPNG2ICO.py "%PythonPath%\Lib\site-packages\%WEBOOB%\share\icons\hicolor\64x64\apps\%%i.png" > nul
|
||||||
|
|
||||||
|
if exist "%StartupFolder%\Weboob\%%i.exe" (
|
||||||
|
del "%StartupFolder%\Weboob\%%i.exe"
|
||||||
|
)
|
||||||
|
|
||||||
|
"Bat_To_Exe_Converter.exe" -bat "%%i.bat" -save "%StartupFolder%\Weboob\%%i.exe" -icon "%PythonPath%\Lib\site-packages\%WEBOOB%\share\icons\hicolor\64x64\apps\%%i.ico" %%i"
|
||||||
|
del "%%i.bat"
|
||||||
|
del "%PythonPath%\Lib\site-packages\%WEBOOB%\share\icons\hicolor\64x64\apps\%%i.ico"
|
||||||
|
)
|
||||||
|
|
||||||
|
goto :InstallSucceed
|
||||||
|
|
||||||
|
:InstallSucceed
|
||||||
|
echo.
|
||||||
|
echo INSTALLATION PROCESS SUCCEED
|
||||||
|
goto :Quit
|
||||||
|
|
||||||
|
:InstallFailed
|
||||||
|
echo.
|
||||||
|
echo INSTALLATION PROCESS FAILED
|
||||||
|
goto :Quit
|
||||||
|
|
||||||
|
:Quit
|
||||||
|
pause
|
||||||
BIN
contrib/windows-install/setuptools-1.1.6.tar.gz
Normal file
BIN
contrib/windows-install/setuptools-1.1.6.tar.gz
Normal file
Binary file not shown.
BIN
contrib/windows-install/weboob-0.g-py2.7.egg
Normal file
BIN
contrib/windows-install/weboob-0.g-py2.7.egg
Normal file
Binary file not shown.
Loading…
Add table
Add a link
Reference in a new issue