Source code for pymyinstall.win_installer.win_ipy_kernels

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


:githublink:`%|py|5`
"""

import json
import os
import sys

if sys.version_info[0] == 2:
    from codecs import open
    from StringIO import StringIO
else:
    from io import StringIO


r_kernel = {
    "display_name": "R%s",
    "language": "R",
    "argv": [
        "%R_HOME%\\bin\\x64\\R.exe",
        "--quiet",
        "-e",
        "IRkernel::main()",
        "--args",
        "{connection_file}"
    ]
}

python_kernel = {
    "language": "python",
    "display_name": "Python 3%s",
    "argv": [
        "%PYTHON_WINHOME%\\python.exe",
        "-m",
        "IPython.kernel",
        "-f",
        "{connection_file}"
    ]
}

julia_kernel = {
    "display_name": "Julia%s",
    "language": "julia",
    "argv": [
        "%JULIA_HOME%\\bin\\julia.exe",
        "-i",
        "-F",
        "%JULIA_PKGDIR%\\v0.3\\IJulia\\src\\kernel.jl",
        "{connection_file}"
    ],
    "codemirror_mode": "julia"
}


[docs]def add_kernel_jupyter(kernel, path, tools_path, python_path, suffix="WP"): """ add a kernel to jupyter :param kernel: dictionary (see global variable in this module) :param path: where to add it :param tools_path: tools paths :param python_path: python path :param suffix: added in bracket at the end of the display name :return: created file :githublink:`%|py|66` """ kernel = kernel.copy() suffix = " (%s)" % suffix kernel["display_name"] = kernel["display_name"] % suffix name = kernel["display_name"] name = name.replace(" ", "_").replace("(", "").replace(")", "") fold = os.path.join(path, name) if not os.path.exists(fold): os.mkdir(fold) st = StringIO() # replacements argv = kernel["argv"] for i in range(len(argv)): if "%" in argv[i]: argv[i] = argv[i].replace("%PYTHON_WINHOME%", python_path) \ .replace("%R_HOME%", os.path.join(tools_path, "R")) \ .replace("%JULIA_HOME%", os.path.join(tools_path, "Julia")) \ .replace("%JULIA_PKGDIR%", os.path.join(tools_path, "Julia", "pkg")) # dump if sys.version_info[0] == 2: json.dump(kernel, st, encoding="utf8") else: json.dump(kernel, st) ker = os.path.join(fold, "kernel.json") with open(ker, "w", encoding="utf8") as f: f.write(st.getvalue()) return ker
[docs]def install_kernels(tools_path, python_path, suffix="WP"): """ install available kernels on Windows :param tools_path: tools paths :param python_path: python path :param suffix: suffix :return: list of creating files :githublink:`%|py|105` """ dest = os.environ["ProgramData"] jupyter = os.path.join(dest, "jupyter", "kernels") if not os.path.exists(jupyter): os.makedirs(jupyter) res = [] if os.path.exists(python_path): res.append( add_kernel_jupyter(python_kernel, jupyter, tools_path, python_path, suffix)) if os.path.exists(os.path.join(tools_path, "R")): res.append( add_kernel_jupyter(r_kernel, jupyter, tools_path, python_path, suffix)) if os.path.exists(os.path.join(tools_path, "Julia")): res.append( add_kernel_jupyter(julia_kernel, jupyter, tools_path, python_path, suffix)) return res