0

这是我想做的事情:从一个正在运行的 python 进程,将它升级到一个 IPython Jupyter 内核,它共享本地和全局变量,并且可以被其他 Jupyter 客户端访问。

我发现IPython.embed哪个升级了会话(但没有给我内核连接信息 afaics)。我还发现ipykernel.ipkernel.IPythonKernel,它似乎也启动了一个嵌入式 ipython shell,但也没有给我一个 jupyter 内核连接信息。

上下文:我想从一个通过 python C api 与 CPython 交互的外部包装程序执行此操作;这就是为什么我不能一开始就简单地启动一个 IPython 内核。

4

1 回答 1

2

好的,这是一个典型的RTFM案例。IPython 嵌入文档提到IPython.embed_kernel它似乎完全符合我的要求。所以这是一个插入的问题

from IPython import embed_kernel
embed_kernel()

这将打印连接信息,并使内核可以访问已在全局命名空间中定义的变量。整洁的!

我的用例还有一个重要的缺点:我希望能够关闭嵌入式内核连接,在普通 python 中做更多的事情,然后重新打开具有可用新状态的相同内核连接。或者,我可以以某种后台恶魔模式启动内核:内核连接将打开,但原始 python 解释器和变量命名空间将保持对原始 python 会话的交互开放,并且新值将与内核客户端共享。

有谁知道这些选项中的任何一个是否可以实现?

于 2022-02-01T10:51:22.733 回答