Source code for pymyinstall.win_installer.win_innosetup_helper

"""
Functions to prepare a setup on Windows, use InnoSetup


:githublink:`%|py|5`
"""
from __future__ import print_function

import os
import sys
from ..installhelper.install_cmd_helper import run_cmd
from .win_ipy_kernels import install_kernels

if sys.version_info[0] == 2:
    from codecs import open
    FileNotFoundError = Exception


[docs]class InnoSetupException(Exception): """ Exception happening with InnoSetup :githublink:`%|py|21` """ pass
[docs]def find_innosetup(): """ find InnoSetup executable :return: executable :githublink:`%|py|30` """ exe = r"C:\Program Files (x86)\Inno Setup 5\compil32.exe" if not os.path.exists(exe): raise FileNotFoundError(exe) return exe
[docs]def run_innosetup(new_script, innosetup=None, log_script=None, temp_folder=".", fLOG=print): """ run InnotSetup for a script :param new_script: script to run :param innosetup: location of InnoSetup (if None, use default location) :param log_script: output logs to this file :param temp_folder: where to copy the modified script :param fLOG: logging function :return: output :githublink:`%|py|47` """ if innosetup is None: innosetup = find_innosetup() cmd = [innosetup, "/cc", new_script] if log_script is not None: raise NotImplementedError() # cmd.append('/LOG="{0}"'.format(log_script)) fLOG("[pymy] ISS script", new_script) fLOG("[pymy] CMD", cmd) out, err = run_cmd(" ".join(cmd), wait=True, fLOG=fLOG) if err is not None and len(err) > 0: raise InnoSetupException( "CMD:\n{0}\nOUT:\n{1}\nERR-5:\n{2}".format(cmd, out, err)) return out
[docs]def innosetup_replacements(script=None, innosetup=None, replacements=None, log_script=None, temp_folder=".", fLOG=print): """ run InnotSetup for a script :param script: script to run, if None, use the default script assuming you want to build a Python Distribution :param innosetup: location of InnoSetup (if None, use default location) :param replacements: replace to make in the script (dictionary) :param log_script: output logs to this file :param temp_folder: where to copy the modified script :param fLOG: logging function :return: new script :githublink:`%|py|76` """ if script is None: script = os.path.abspath( os.path.join(os.path.dirname(__file__), "innosetup_script.iss")) if replacements is None: replacements = dict() with open(script, "r", encoding="utf8") as f: content = f.read() for k, v in replacements.items(): content = content.replace(k, v) new_script = os.path.join(os.path.abspath(temp_folder), os.path.split(script)[-1].replace(".iss", ".temp.iss")) with open(new_script, "w", encoding="utf8") as f: f.write(content) return new_script
[docs]def inno_install_kernels(root, suffix): """ install kernels for Jupyter notebooks :param root: root folder :param suffix: suffix :githublink:`%|py|104` """ if root in os.environ: path = os.environ[root] tools = os.path.join(path, "tools") if not os.path.exists(tools): tools = os.path.normpath(os.path.join(path, "..", "tools")) python = os.path.normpath(os.path.join(path, "..", "python")) else: python = os.path.join(path, "python") else: tools = os.path.join(root, "tools") python = os.path.join(root, "python") if not os.path.exists(tools): raise FileNotFoundError(tools) if not os.path.exists(python): raise FileNotFoundError(python) install_kernels(tools, python, suffix)