def clean_kernel_spec(user=True, prefix=None): mgr = KernelSpecManager() # NOTE: remove_kernel_spec() and get_all_specs() does not support explicit prefix. # Sometimes we may need to perform --clean-only multiple times to completely # remove all kernelspecs installed around venvs and system global directories. for name, info in mgr.get_all_specs().items(): if name.startswith('backend'): print("Removing existing Backend.AI kernel: {0}" .format(info['spec']['display_name'])) mgr.remove_kernel_spec(name)
def _jupyter_kernel(args): """Make xonsh available as a Jupyter kernel.""" try: from jupyter_client.kernelspec import KernelSpecManager, NoSuchKernel except ImportError as e: raise ImportError( "Jupyter not found in current Python environment") from e ksm = KernelSpecManager() root = args.root prefix = args.prefix if args.prefix else sys.prefix user = args.user spec = { "argv": [ sys.executable, "-m", "xonsh.jupyter_kernel", "-f", "{connection_file}", ], "display_name": "Xonsh", "language": "xonsh", "codemirror_mode": "shell", } if root and prefix: # os.path.join isn't used since prefix is probably absolute prefix = root + prefix try: old_jup_kernel = ksm.get_kernel_spec(XONSH_JUPYTER_KERNEL) if not old_jup_kernel.resource_dir.startswith(prefix): print("Removing existing Jupyter kernel found at {0}".format( old_jup_kernel.resource_dir)) ksm.remove_kernel_spec(XONSH_JUPYTER_KERNEL) except NoSuchKernel: pass if sys.platform == "win32": # Ensure that conda-build detects the hard coded prefix spec["argv"][0] = spec["argv"][0].replace(os.sep, os.altsep) prefix = prefix.replace(os.sep, os.altsep) with tempfile.TemporaryDirectory() as d: os.chmod(d, 0o755) # Starts off as 700, not user readable with open(os.path.join(d, "kernel.json"), "w") as f: json.dump(spec, f, sort_keys=True) print("Installing Jupyter kernel spec:") print(" root: {0!r}".format(root)) if user: print(" as user: {0}".format(user)) elif root and prefix: print(" combined prefix {0!r}".format(prefix)) else: print(" prefix: {0!r}".format(prefix)) ksm.install_kernel_spec(d, XONSH_JUPYTER_KERNEL, user=user, prefix=(None if user else prefix)) return 0
def remove(_ctx) -> None: kernel_spec = KernelSpecManager() kernel_spec.remove_kernel_spec('michelson')
def _jupyter_kernel( user=False, prefix=None, root=None, ): """Generate xonsh kernel for jupyter. Parameters ---------- user : -u, --user Install kernel spec in user config directory. prefix : -p, --prefix Installation prefix for bin, lib, etc. root : -r, --root Install relative to this alternate root directory. """ try: from jupyter_client.kernelspec import KernelSpecManager, NoSuchKernel except ImportError as e: raise ImportError("Jupyter not found in current Python environment") from e ksm = KernelSpecManager() prefix = prefix or sys.prefix spec = { "argv": [ sys.executable, "-m", "xonsh.jupyter_kernel", "-f", "{connection_file}", ], "display_name": "Xonsh", "language": "xonsh", "codemirror_mode": "shell", } if root and prefix: # os.path.join isn't used since prefix is probably absolute prefix = root + prefix try: old_jup_kernel = ksm.get_kernel_spec(XONSH_JUPYTER_KERNEL) if not old_jup_kernel.resource_dir.startswith(prefix): print( "Removing existing Jupyter kernel found at {}".format( old_jup_kernel.resource_dir ) ) ksm.remove_kernel_spec(XONSH_JUPYTER_KERNEL) except NoSuchKernel: pass if sys.platform == "win32": # Ensure that conda-build detects the hard coded prefix spec["argv"][0] = spec["argv"][0].replace(os.sep, os.altsep) prefix = prefix.replace(os.sep, os.altsep) with tempfile.TemporaryDirectory() as d: os.chmod(d, 0o755) # Starts off as 700, not user readable with open(os.path.join(d, "kernel.json"), "w") as f: json.dump(spec, f, sort_keys=True) print("Installing Jupyter kernel spec:") print(f" root: {root!r}") if user: print(f" as user: {user}") elif root and prefix: print(f" combined prefix {prefix!r}") else: print(f" prefix: {prefix!r}") ksm.install_kernel_spec( d, XONSH_JUPYTER_KERNEL, user=user, prefix=(None if user else prefix) ) return 0