Source code for pymyinstall.win_installer.win_setup_julia

"""
Functions to prepare a setup on Windows, R functions


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

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

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


_script_install = os.path.join(
    os.path.abspath(os.path.dirname(__file__)), "Julia_install.jl")

_script_build = os.path.join(
    os.path.abspath(os.path.dirname(__file__)), "Julia_build.jl")

_script_init = os.path.join(
    os.path.abspath(os.path.dirname(__file__)), "Julia_init.jl")


[docs]class JuliaBatchException(Exception): """ raised when running R in batch mode :githublink:`%|py|30` """ pass
[docs]def julia_run_script(julia_path, python_path, script, verbose=False, fLOG=print): """ run a script on Julia :param julia_path: julia location :param script: script to run :param python_path: path to python :param verbose: more information :param fLOG: logging function :return: output :githublink:`%|py|44` """ memo_path = os.environ["PATH"] epath = memo_path + ";" + \ ";".join([python_path, os.path.join(python_path, "Scripts")]) os.environ["PATH"] = epath exe = os.path.join(julia_path, "bin", "julia.exe") if not os.path.exists(exe): raise FileNotFoundError(exe) pkg = os.path.join(julia_path, "pkg") if not os.path.exists(pkg): os.mkdir(pkg) os.environ["JULIA_PKGDIR"] = pkg cmd = [exe, script, "--no_history-file"] cmd = " ".join(cmd) if verbose: fLOG("[pymy] set JULIA_PKGDIR=" + pkg) out, err = run_cmd(cmd, wait=True) if err is not None and len(err) > 0 and \ "err" in err.lower() or "warn" in err.lower(): raise JuliaBatchException( "CMD:\n{0}\nOUT:\n{1}\nERR--D:\n{2}".format(cmd, out, err)) os.environ["PATH"] = memo_path patch_julia03(julia_path, verbose=verbose, fLOG=fLOG) return out
[docs]def patch_julia03(julia_path, verbose=False, fLOG=print): """ patch absolute path in packages such as Julia/ZMQ or Julia/Nettle. :param julia_path: julia_path :param verbose: more information :param fLOG: logging function :githublink:`%|py|80` """ pkg = os.path.join(julia_path, "pkg") pkg_d = pkg.replace("\\", "\\\\") if verbose: fLOG("[pymy] string to replace", pkg_d) for root, dirs, files in os.walk(pkg): for name in files: if name.endswith("deps.jl"): full = os.path.join(root, name) with open(full, "r", encoding="utf8") as f: content = f.read() if pkg_d in content: content = content.replace(pkg_d, "%JULIA_PKGDIR%") if verbose: fLOG("[pymy] patch ", full) with open(full, "w", encoding="utf8") as f: f.write(content)