跨多个ipython笔记本共享命名空间

跨多个ipython笔记本共享命名空间,ipython,ipython-notebook,Ipython,Ipython Notebook,我想同时使用几个共享同一名称空间的ipython笔记本电脑。目前(ipython-1.1.0)是否有一种方法可以做到这一点 我曾尝试在同一ipython内核上创建不同的笔记本,但这些笔记本不共享名称空间。此外,我已经能够使用中的答案在同一命名空间上的笔记本旁边使用终端控制台,但我找不到与--existing参数等效的笔记本 非常感谢IPython笔记本没有与现有的相同的功能。笔记本电脑不共享内核。这不是笔记本本身的限制,它只是笔记本服务器代码中的一个设计决策。例如,可以修改服务器代码,使所有笔记

我想同时使用几个共享同一名称空间的ipython笔记本电脑。目前(ipython-1.1.0)是否有一种方法可以做到这一点

我曾尝试在同一ipython内核上创建不同的笔记本,但这些笔记本不共享名称空间。此外,我已经能够使用中的答案在同一命名空间上的笔记本旁边使用终端控制台,但我找不到与--existing参数等效的笔记本


非常感谢

IPython笔记本没有与现有的相同的功能。笔记本电脑不共享内核。这不是笔记本本身的限制,它只是笔记本服务器代码中的一个设计决策。例如,可以修改服务器代码,使所有笔记本共享同一内核。您可以通过在IPython配置中进行一些修补来实现这一点。首先创建一个配置文件:

$ ipython profile create singlekernel
[ProfileCreate] Generating default config file: u'~/.ipython/profile_singlekernel/ipython_config.py'
[ProfileCreate] Generating default config file: u'~/.ipython/profile_singlekernel/ipython_qtconsole_config.py'
[ProfileCreate] Generating default config file: u'~/.ipython/profile_singlekernel/ipython_notebook_config.py'
[ProfileCreate] Generating default config file: u'~/.ipython/profile_singlekernel/ipython_nbconvert_config.py'
并编辑
$(ipython locate profile singlekernel)/ipython\u notebook\u config.py
以包含:

# Configuration file for ipython-notebook.

c = get_config()

import os
import uuid
from IPython.kernel.multikernelmanager import MultiKernelManager

def start_kernel(self, **kwargs):
    """Minimal override of MKM.start_kernel that always returns the same kernel"""
    kernel_id = kwargs.pop('kernel_id', str(uuid.uuid4()))
    if self.km is None:
        self.km = self.kernel_manager_factory(connection_file=os.path.join(
                self.connection_dir, "kernel-%s.json" % kernel_id),
                parent=self, autorestart=True, log=self.log
    )
    if not self.km.is_alive():
        self.log.info("starting single kernel")
        self.km.start_kernel(**kwargs)
    else:
        self.log.info("reusing existing kernel")
    self._kernels[kernel_id] = self.km
    return kernel_id

MultiKernelManager.km = None
MultiKernelManager.start_kernel = start_kernel
这只会覆盖内核启动机制,只启动一个内核,并在每次后续请求时返回它, 而不是为每个内核ID启动一个新的

现在,无论何时启动笔记本服务器

ipython notebook --profile singlekernel

该会话中的所有笔记本将共享同一内核。

不幸的是,这不再有效,您会收到错误消息ipython.kernel被ipython.parallel替换

要改变这一点,有一种比上面更不优雅的方法,那就是将第273行附近的IPython/frontend/html/notebook/kernelmanager.py从

kernel\u id=self.kernel\u for\u notebook(notebook\u id)

对于Anaconda python,将kernelmanager.py中的start_内核替换为

def start_kernel(self, kernel_id=None, path=None, **kwargs):
    global saved_kernel_id
    if saved_kernel_id:
        return saved_kernel_id
    if kernel_id is None:
        kwargs['extra_arguments'] = self.kernel_argv
        if path is not None:
            kwargs['cwd'] = self.cwd_for_path(path)
        kernel_id = super(MappingKernelManager, self).start_kernel(**kwargs)
        self.log.info("Kernel started: %s" % kernel_id)
        self.log.debug("Kernel args: %r" % kwargs)
        self.add_restart_callback(kernel_id,
            lambda : self._handle_kernel_died(kernel_id),
            'dead',
        )
    else:
        self._check_kernel_id(kernel_id)
        self.log.info("Using existing kernel: %s" % kernel_id)
    saved_kernel_id = kernel_id
    return kernel_id

    saved_kernel_id = None
在上面

    class MappingKernelManager(MultiKernelManager):
真正的伊皮顿大师,请提供正确的解决方案。很多使用笔记本电脑的人都希望能够共享内核,这是很自然的,因为一个笔记本电脑很快就会变得太大,无法处理单个复杂的应用程序,因此更容易将应用程序分解为多个笔记本


另外,大师们,当你们在听的时候,最好像Mathematica一样有一个折叠-扩展功能,这样你们就可以只查看你们关心的笔记本的一部分,并可以缩小其余的部分。

这对我来说是完美的,但不幸的是,在2021年它不起作用(至少对我来说)。有人知道如何调整以使其再次工作吗?(我特别使用:jupyter core:4.7.1 jupyter笔记本:6.3.0 qtconsole:5.0.3 ipython:7.22.0 ipykernel:5.5.3 jupyter客户端:6.1.12 jupyter实验室:3.0.16 nbconvert:6.0.7 ipywidgets:7.6.3 nbformat:5.1.3 traitlets:5.0.5)
    class MappingKernelManager(MultiKernelManager):