重要
本文档涵盖 IPython 6.0 及更高版本。从 6.0 版开始,IPython 不再支持与低于 3.3 的 Python 版本(包括所有版本的 Python 2.7)的兼容性。
如果您正在寻找与 Python 2.7 兼容的 IPython 版本,请使用 IPython 5.x LTS 版本并参阅其文档(LTS 是长期支持版本)。
制作简单的 Python 包装器内核¶
在 3.0 版中添加。
您现在可以在 IPython 中重新使用内核机制来轻松制作新的内核。这对于具有 Python 绑定的语言很有用,例如 Octave(通过 Oct2Py),或可以在 tty 中使用 pexpect 控制 REPL 的语言,例如 bash。
另请参见
- bash_kernel
使用此机制编写的 bash 的简单内核
必需步骤¶
子类 ipykernel.kernelbase.Kernel
,并实现以下方法和属性
- class MyKernel¶
- implementation¶
- implementation_version¶
- language¶
- language_version¶
- banner¶
有关 内核信息 回复的信息。“实现”指的是内核(例如 IPython),而“语言”指的是它解释的语言(例如 Python)。在第一个提示符之前,会向用户在控制台 UI 中显示“横幅”。所有这些值都是字符串。
- language_info¶
有关 内核信息 回复的语言信息,以字典形式提供。其中应包含以下键:
mimetype
,其值为目标语言中代码的 MIME 类型(例如'text/x-python'
),以及file_extension
(例如'py'
)。如果需要与language
不同,其中还可能包含键codemirror_mode
和pygments_lexer
。稍后可能向其中添加其他键。
- do_execute(code, silent, store_history=True, user_expressions=None, allow_stdin=False)¶
执行用户代码。
- 参数:
您的方法应返回一个包含 执行结果 中所述字段的字典。要显示输出,它可以使用
send_response()
发送消息。有关不同消息类型的详细信息,请参阅 IPython 中的消息传递。
要启动内核,请在模块末尾添加此内容
if __name__ == '__main__':
from ipykernel.kernelapp import IPKernelApp
IPKernelApp.launch_instance(kernel_class=MyKernel)
示例¶
echokernel.py
只会将给定的任何输入回显到 stdout
from ipykernel.kernelbase import Kernel
class EchoKernel(Kernel):
implementation = 'Echo'
implementation_version = '1.0'
language = 'no-op'
language_version = '0.1'
language_info = {'mimetype': 'text/plain'}
banner = "Echo kernel - as useful as a parrot"
def do_execute(self, code, silent, store_history=True, user_expressions=None,
allow_stdin=False):
if not silent:
stream_content = {'name': 'stdout', 'text': code}
self.send_response(self.iopub_socket, 'stream', stream_content)
return {'status': 'ok',
# The base class increments the execution count
'execution_count': self.execution_count,
'payload': [],
'user_expressions': {},
}
if __name__ == '__main__':
from ipykernel.kernelapp import IPKernelApp
IPKernelApp.launch_instance(kernel_class=EchoKernel)
以下是此 kernel.json
文件的内核规范
{"argv":["python","-m","echokernel", "-f", "{connection_file}"],
"display_name":"Echo"
}
可选步骤¶
你可以覆盖许多其他方法来改善内核的功能。所有这些方法都应返回一个字典,如 消息传递规范 的相关部分中所述。
- class MyBetterKernel¶
-
- do_history(hist_access_type, output, raw, session=None, start=None, stop=None, n=None, pattern=None, unique=False)¶
历史访问。只传递与所涉及的历史请求类型相关的相关参数,因此你的方法定义必须对此处显示的所有带有默认值的参数具有默认值。
另请参见
历史 消息