Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1"""
2@file
3@brief Functions to prepare a setup on Windows, R functions
4"""
5from __future__ import print_function
7import os
8import sys
9from ..installhelper.install_cmd_helper import run_cmd
11if sys.version_info[0] == 2:
12 from codecs import open
13 FileNotFoundError = Exception
16_script_install = os.path.join(
17 os.path.abspath(os.path.dirname(__file__)), "Julia_install.jl")
19_script_build = os.path.join(
20 os.path.abspath(os.path.dirname(__file__)), "Julia_build.jl")
22_script_init = os.path.join(
23 os.path.abspath(os.path.dirname(__file__)), "Julia_init.jl")
26class JuliaBatchException(Exception):
28 """
29 raised when running R in batch mode
30 """
31 pass
34def julia_run_script(julia_path, python_path, script, verbose=False, fLOG=print):
35 """
36 run a script on Julia
38 @param julia_path julia location
39 @param script script to run
40 @param python_path path to python
41 @param verbose more information
42 @param fLOG logging function
43 @return output
44 """
45 memo_path = os.environ["PATH"]
46 epath = memo_path + ";" + \
47 ";".join([python_path, os.path.join(python_path, "Scripts")])
48 os.environ["PATH"] = epath
50 exe = os.path.join(julia_path, "bin", "julia.exe")
51 if not os.path.exists(exe):
52 raise FileNotFoundError(exe)
53 pkg = os.path.join(julia_path, "pkg")
54 if not os.path.exists(pkg):
55 os.mkdir(pkg)
57 os.environ["JULIA_PKGDIR"] = pkg
58 cmd = [exe, script, "--no_history-file"]
59 cmd = " ".join(cmd)
60 if verbose:
61 fLOG("[pymy] set JULIA_PKGDIR=" + pkg)
62 out, err = run_cmd(cmd, wait=True)
63 if err is not None and len(err) > 0 and \
64 "err" in err.lower() or "warn" in err.lower():
65 raise JuliaBatchException(
66 "CMD:\n{0}\nOUT:\n{1}\nERR--D:\n{2}".format(cmd, out, err))
68 os.environ["PATH"] = memo_path
69 patch_julia03(julia_path, verbose=verbose, fLOG=fLOG)
70 return out
73def patch_julia03(julia_path, verbose=False, fLOG=print):
74 """
75 patch absolute path in packages such as Julia/ZMQ or Julia/Nettle.
77 @param julia_path julia_path
78 @param verbose more information
79 @param fLOG logging function
80 """
81 pkg = os.path.join(julia_path, "pkg")
82 pkg_d = pkg.replace("\\", "\\\\")
83 if verbose:
84 fLOG("[pymy] string to replace", pkg_d)
85 for root, dirs, files in os.walk(pkg):
86 for name in files:
87 if name.endswith("deps.jl"):
88 full = os.path.join(root, name)
89 with open(full, "r", encoding="utf8") as f:
90 content = f.read()
91 if pkg_d in content:
92 content = content.replace(pkg_d, "%JULIA_PKGDIR%")
93 if verbose:
94 fLOG("[pymy] patch ", full)
95 with open(full, "w", encoding="utf8") as f:
96 f.write(content)