Hide keyboard shortcuts

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 

6 

7import os 

8import sys 

9from ..installhelper.install_cmd_helper import run_cmd 

10 

11if sys.version_info[0] == 2: 

12 from codecs import open 

13 FileNotFoundError = Exception 

14 

15 

16_script_install = os.path.join( 

17 os.path.abspath(os.path.dirname(__file__)), "Julia_install.jl") 

18 

19_script_build = os.path.join( 

20 os.path.abspath(os.path.dirname(__file__)), "Julia_build.jl") 

21 

22_script_init = os.path.join( 

23 os.path.abspath(os.path.dirname(__file__)), "Julia_init.jl") 

24 

25 

26class JuliaBatchException(Exception): 

27 

28 """ 

29 raised when running R in batch mode 

30 """ 

31 pass 

32 

33 

34def julia_run_script(julia_path, python_path, script, verbose=False, fLOG=print): 

35 """ 

36 run a script on Julia 

37 

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 

49 

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) 

56 

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)) 

67 

68 os.environ["PATH"] = memo_path 

69 patch_julia03(julia_path, verbose=verbose, fLOG=fLOG) 

70 return out 

71 

72 

73def patch_julia03(julia_path, verbose=False, fLOG=print): 

74 """ 

75 patch absolute path in packages such as Julia/ZMQ or Julia/Nettle. 

76 

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)