def remove_kernelspecs(): km = kernelspec.KernelSpecManager() kernel_id = None while kernel_id != "done": remote_kernels = { kernelspec.get_kernel_spec(k).display_name: k for k, v in kernelspec.find_kernel_specs().items() if k.startswith("ssh_") } if remote_kernels == {}: print_ok(" => No databricklabs_jupyterlab kernel spec left") break answer = question( "kernel_name", "Which kernel spec to delete (Ctrl-C to finish)?", list(remote_kernels.keys()), ) if answer is None: break kernel_name = answer["kernel_name"] if kernel_id != "done": answer = input("Really delete kernels spec '%s' (y/n) " % kernel_name) if answer.lower() == "y": km.remove_kernel_spec(remote_kernels[kernel_name])
def check_kernel_spec(): # https://jupyter-client.readthedocs.io/en/latest/api/kernelspec.html import jupyter_client.kernelspec as jk kernel_spec_manager = jk.KernelSpecManager() print(kernel_spec_manager.get_all_specs())
def create_post(self, path, **kw): """Create a new post.""" if flag is None: req_missing(['ipython[notebook]>=2.0.0'], 'build this site (compile ipynb)') content = kw.pop('content', None) onefile = kw.pop('onefile', False) kernel = kw.pop('ipython_kernel', None) # is_page is not needed to create the file kw.pop('is_page', False) metadata = {} metadata.update(self.default_metadata) metadata.update(kw) makedirs(os.path.dirname(path)) if content.startswith("{"): # imported .ipynb file, guaranteed to start with "{" because it’s JSON. nb = nbformat.reads(content, current_nbformat) else: if ipy_modern: nb = nbformat.v4.new_notebook() nb["cells"] = [nbformat.v4.new_markdown_cell(content)] else: nb = nbformat.new_notebook() nb["worksheets"] = [nbformat.new_worksheet(cells=[nbformat.new_text_cell('markdown', [content])])] if kernelspec is not None: if kernel is None: kernel = self.default_kernel self.logger.notice('No kernel specified, assuming "{0}".'.format(kernel)) IPYNB_KERNELS = {} ksm = kernelspec.KernelSpecManager() for k in ksm.find_kernel_specs(): IPYNB_KERNELS[k] = ksm.get_kernel_spec(k).to_dict() IPYNB_KERNELS[k]['name'] = k del IPYNB_KERNELS[k]['argv'] if kernel not in IPYNB_KERNELS: self.logger.error('Unknown kernel "{0}". Maybe you mispelled it?'.format(kernel)) self.logger.info("Available kernels: {0}".format(", ".join(sorted(IPYNB_KERNELS)))) raise Exception('Unknown kernel "{0}"'.format(kernel)) nb["metadata"]["kernelspec"] = IPYNB_KERNELS[kernel] else: # Older IPython versions don’t need kernelspecs. pass if onefile: nb["metadata"]["nikola"] = metadata with io.open(path, "w+", encoding="utf8") as fd: if ipy_modern: nbformat.write(nb, fd, 4) else: nbformat.write(nb, fd, 'ipynb')
def _get_kernel_specs(self): kernelspec_manager = kernelspec.KernelSpecManager() kernelspec_info = kernelspec_manager.get_all_specs() for (key, value) in kernelspec_info.items(): self.kernel_specs[value["spec"]["language"]] = {"display_name":"", \ "language":"", "name":""} self.kernel_specs[value["spec"]["language"]]["display_name"] = \ value["spec"]["display_name"] self.kernel_specs[value["spec"]["language"]]["language"] = \ value["spec"]["language"] self.kernel_specs[value["spec"]["language"]]["name"] = \ key
def setUp(self): self.env_patch = test_env() self.env_patch.start() self.sample_kernel_dir = self._install_sample_kernel( pjoin(paths.jupyter_data_dir(), 'kernels')) self.ksm = kernelspec.KernelSpecManager() td2 = TemporaryDirectory() self.addCleanup(td2.cleanup) self.installable_kernel = td2.name with open(pjoin(self.installable_kernel, 'kernel.json'), 'w') as f: json.dump(sample_kernel_json, f)
def _installed_kernels(self): if cfg.jupyter_kernels: return safe_decode(cfg.jupyter_kernels).split(u';') kernelspec_manager = kernelspec.KernelSpecManager() kernels = list(kernelspec_manager.find_kernel_specs().keys()) # Python 2 and 3 kernels apparently just start the same kernel that # corresponds to the active Python kernel. So if they are both # installed, we expose only one. if 'python2' in kernels and 'python3' in kernels: kernels.remove('python2') oslogger.debug('installed kernels: {}'.format(str(kernels))) return kernels
def create_post(self, path, **kw): """Create a new post.""" self._req_missing_ipynb() content = kw.pop('content', None) onefile = kw.pop('onefile', False) kernel = kw.pop('jupyter_kernel', None) # is_page is not needed to create the file kw.pop('is_page', False) metadata = {} metadata.update(self.default_metadata) metadata.update(kw) makedirs(os.path.dirname(path)) if content.startswith("{"): # imported .ipynb file, guaranteed to start with "{" because it’s JSON. nb = nbformat.reads(content, current_nbformat) else: nb = nbformat.v4.new_notebook() nb["cells"] = [nbformat.v4.new_markdown_cell(content)] if kernel is None: kernel = self.default_kernel self.logger.warning( 'No kernel specified, assuming "{0}".'.format(kernel)) IPYNB_KERNELS = {} ksm = kernelspec.KernelSpecManager() for k in ksm.find_kernel_specs(): IPYNB_KERNELS[k] = ksm.get_kernel_spec(k).to_dict() IPYNB_KERNELS[k]['name'] = k del IPYNB_KERNELS[k]['argv'] if kernel not in IPYNB_KERNELS: self.logger.error( 'Unknown kernel "{0}". Maybe you mispelled it?'.format( kernel)) self.logger.info("Available kernels: {0}".format(", ".join( sorted(IPYNB_KERNELS)))) raise Exception('Unknown kernel "{0}"'.format(kernel)) nb["metadata"]["kernelspec"] = IPYNB_KERNELS[kernel] if onefile: nb["metadata"]["nikola"] = metadata with io.open(path, "w+", encoding="utf8") as fd: nbformat.write(nb, fd, 4)
def setUp(self): td = TemporaryDirectory() self.addCleanup(td.cleanup) self.sample_kernel_dir = pjoin(td.name, 'kernels', 'Sample') os.makedirs(self.sample_kernel_dir) json_file = pjoin(self.sample_kernel_dir, 'kernel.json') with open(json_file, 'w') as f: json.dump(sample_kernel_json, f) self.ksm = kernelspec.KernelSpecManager(ipython_dir=td.name) td2 = TemporaryDirectory() self.addCleanup(td2.cleanup) self.installable_kernel = td2.name with open(pjoin(self.installable_kernel, 'kernel.json'), 'w') as f: json.dump(sample_kernel_json, f)
def setUp(self): td = TemporaryDirectory() self.env_patch = patch.dict( os.environ, { 'JUPYTER_CONFIG_DIR': pjoin(td.name, 'jupyter'), 'JUPYTER_DATA_DIR': pjoin(td.name, 'jupyter_data'), 'JUPYTER_RUNTIME_DIR': pjoin(td.name, 'jupyter_runtime'), 'IPYTHONDIR': pjoin(td.name, 'ipython'), }) self.env_patch.start() self.addCleanup(td.cleanup) self.sample_kernel_dir = self._install_sample_kernel( pjoin(td.name, 'jupyter_data', 'kernels')) self.ksm = kernelspec.KernelSpecManager() td2 = TemporaryDirectory() self.addCleanup(td2.cleanup) self.installable_kernel = td2.name with open(pjoin(self.installable_kernel, 'kernel.json'), 'w') as f: json.dump(sample_kernel_json, f)
def test_deprecated_whitelist(self): ksm = kernelspec.KernelSpecManager() ksm.whitelist = ["bar"] kernels = ksm.find_kernel_specs() assert not len(kernels)
def test_allowed_kernel_names(self): ksm = kernelspec.KernelSpecManager() ksm.allowed_kernelspecs = ["foo"] kernels = ksm.find_kernel_specs() assert not len(kernels)
def available_kernels(): """Return the list of kernels""" mgr = kernelspec.KernelSpecManager() return list(mgr.find_kernel_specs().keys())
def install_kernel(*, template_path, overlay_path, kernel_name): kernel_instrument = os.path.basename( os.path.dirname(os.environ['SINGULARITY_CONTAINER'])) kerenl_image = os.environ['SINGULARITY_NAME'].replace('.sif', '') if kernel_name is None: kernel_name = f"{kernel_instrument}-{kerenl_image}" ksm = kernelspec.KernelSpecManager() if kernel_name in ksm.get_all_specs().keys(): print( f"Removing existing kernelspec in {ksm.get_kernel_spec(kernel_name).resource_dir}" ) ksm.install_kernel_spec(template_path, kernel_name=kernel_name, user=True) kernel = ksm.get_kernel_spec(kernel_name) print(f"Installed kernelspec {kernel_name} in {kernel.resource_dir}") # Overlay command templating if overlay_path is not None: if not os.path.isabs(overlay_path): overlay_path = os.path.abspath(overlay_path) overlay_cmd = f"--overlay\", \"{overlay_path}" else: overlay_cmd = "" # Crappily hard-coded list of binds, TODO: IMBROVE BIND PATH TEMPLATING target_bind = [ "/gpfs", "/data", "/afs", "/cvmfs", "/pnfs", "/nfs", "/asap3", "/run", "/tmp" ] bind_cmd = ["-B\", \"{0}:{0}".format(b) for b in target_bind] # Fill in kernel.json variables spec_path = os.path.join(kernel.resource_dir, 'kernel.json') with open(spec_path, 'r+') as spec_file: spec = spec_file.read() spec = spec.replace('{{OVERLAY_CMD}}', overlay_cmd) spec = spec.replace('{{BIND_CMD}}', "\",\n \"".join(bind_cmd)) spec = spec.replace('{{IMAGE_PATH}}', os.environ['SINGULARITY_CONTAINER']) spec = spec.replace('{{KERNEL_ROOT}}', kernel.resource_dir) spec = spec.replace('{{KERNEL_NAME}}', kernel_name) # TODO: Better way of doing this empty quote stripping thing spec_no_empty_quotes = [] for l in spec.split("\n"): if '""' in l: pass else: spec_no_empty_quotes.append(l) spec_file.seek(0) spec_file.write("\n".join(spec_no_empty_quotes))
def _kernel_spec_manager_default(self): return kernelspec.KernelSpecManager(ipython_dir=self.ipython_dir)
def __exit__(self, type, value, traceback): jupyter_kernel.KernelSpecManager().remove_kernel_spec(self.kernel)
def _kernel_spec_manager_default(self) -> kernelspec.KernelSpecManager: return kernelspec.KernelSpecManager(data_dir=self.data_dir)
def test_remove_kernelspecs(self): km = kernelspec.KernelSpecManager() for kernel_name in get_test_kernels(): km.remove_kernel_spec(kernel_name)