Jupyter 和 Common Lisp
Jupyter and Common Lisp
我正在尝试安装 cl-jupyter (A common-lisp kernel for Jupyter),但无法正常工作:当我打开一个新的 lisp 笔记本(或更改现有笔记本的内核)时,它在显示以下消息:
[I 18:26:50.855 NotebookApp] Kernel started: ccba815a-9065-4fad-9d95-06f6291136d2
To load "cl-jupyter":
Load 1 ASDF system:
cl-jupyter
; Loading "cl-jupyter"
...............
cl-jupyter: an enhanced interactive Common Lisp REPL
(Version 0.7 - Jupyter protocol v.5.0)
--> (C) 2014-2015 Frederic Peschanski (cf. LICENSE)
kernel configuration = ((hb_port . 58864) (shell_port . 37462)
(transport . tcp) (iopub_port . 43232)
(signature_scheme . hmac-sha256) (control_port . 52184)
(stdin_port . 45879)
(key . 2ae7d65f-65f9-40d8-bfd4-21760eaec0ca)
(ip . 127.0.0.1))
[Hearbeat] starting...
[Heartbeat] thread started
[Heartbeat] thread started
[Kernel] Entering mainloop ...
[Shell] loop started
Argh! corrupted error depth, halting
fatal error encountered in SBCL pid 24605(tid 140737353922304):
%PRIMITIVE HALT called; the party is over.
一些细节:
Jupyter
与 python(2x 和 3x)配合使用效果很好。
sbcl
似乎也工作正常(我刚开始使用 common-lisp,所以我可能会遗漏一些东西 - 但我可以 运行 编码,并使用 asdf 和 quicklisp)。
- 我通过 运行ning "
python3 ./install-cl-jupyter.py
" 安装了它。
- 我的
.sbclrc
文件现在只包含“(load "~/quicklisp/setup.lisp")
”。
系统信息:
- OS: Linux 4.1.13-1-MANJARO x86_64 GNU/Linux
- Python 3.5.0
- SBCL 1.3.0
- Jupyter 版本 4.0.6
我尝试过的一些事情:
文件 ~/.ipython/kernels/lisp/kernel.json
包含:
{"argv": ["sbcl", "--non-interactive", "--load", "/home/myusername/lisp/systems/cl-jupyter/cl-jupyter.lisp", "/homemyusername/lisp/systems/cl-jupyter/src", "/home/myusername/lisp/systems/cl-jupyter", "{connection_file}"], "display_name": "SBCL Lisp", "language": "lisp"}
所有路径都是正确的。当我手动 运行 相同的代码时:
sbcl --non-interactive --load "/home/myusername/lisp/systems/cl-jupyter/cl-jupyter.lisp" "/homemyusername/lisp/systems/cl-jupyter/src" "/home/myusername/lisp/systems/cl-jupyter" kernel-07e04903-c562-4c67-bcc1-b68f4047d8d2.json
(其中 "kernel-07e04903-c562-4c67-bcc1-b68f4047d8d2.json" 是我保存的 lisp 内核自动生成的文件),它 "looks ok"(例如它 运行s,并且等待没有错误) .
我尝试进行一些快速调试打印,我最好的猜测是它在 src/shell.lisp
行崩溃
(vbinds (identities sig msg buffers) (message-recv (shell-socket shell))
但是,我可能是错的。因为它看起来有点像与通信有关,所以我确保 zeromq 已更新。
除了学习更多的 lisp,然后回来正确调试代码,我不确定下一步是什么 - 但我希望使用 Jupyter 来学习它:)
如果有任何建议,我将不胜感激,
谢谢。
此问题是由于 0MQ 版本 4 中消息结构 zmq_msg_t
的大小发生变化引起的。1.x 从版本 4 中的 32 字节大小变为 64 字节。0.x.
cl-jupyter
使用的0MQ接口库是pzmq
,据称该库支持0MQ到4.0版本。在撰写本文时,pzmq
使用 32 字节的 0MQ 消息大小。如果安装了 0MQ 版本 4.1.x,这将导致内部错误。
这里有两种解决方案:
- 将 0MQ 安装降级到版本 4。0.x
- 通过将
c-api.lisp
中 msg%
的定义从 32 字节更新为 64 字节来修复 pzmq
库。
更新 - 2016 年 5 月 9 日
pzmq
库已更新以支持 0MQ 版本 4。1.x,(保持与旧版本的兼容性)。 pzmq
的新版本计划作为 2016 年 5 月 Quicklisp 版本的一部分发布。
更新 - 2016 年 6 月 1 日
2016 年 5 月的 Quicklisp 版本包含解决此问题的 pzmq
库更新。不再需要降级 0MQ 或修改 pzmq
库。
我正在尝试安装 cl-jupyter (A common-lisp kernel for Jupyter),但无法正常工作:当我打开一个新的 lisp 笔记本(或更改现有笔记本的内核)时,它在显示以下消息:
[I 18:26:50.855 NotebookApp] Kernel started: ccba815a-9065-4fad-9d95-06f6291136d2
To load "cl-jupyter":
Load 1 ASDF system:
cl-jupyter
; Loading "cl-jupyter"
...............
cl-jupyter: an enhanced interactive Common Lisp REPL
(Version 0.7 - Jupyter protocol v.5.0)
--> (C) 2014-2015 Frederic Peschanski (cf. LICENSE)
kernel configuration = ((hb_port . 58864) (shell_port . 37462)
(transport . tcp) (iopub_port . 43232)
(signature_scheme . hmac-sha256) (control_port . 52184)
(stdin_port . 45879)
(key . 2ae7d65f-65f9-40d8-bfd4-21760eaec0ca)
(ip . 127.0.0.1))
[Hearbeat] starting...
[Heartbeat] thread started
[Heartbeat] thread started
[Kernel] Entering mainloop ...
[Shell] loop started
Argh! corrupted error depth, halting
fatal error encountered in SBCL pid 24605(tid 140737353922304):
%PRIMITIVE HALT called; the party is over.
一些细节:
Jupyter
与 python(2x 和 3x)配合使用效果很好。sbcl
似乎也工作正常(我刚开始使用 common-lisp,所以我可能会遗漏一些东西 - 但我可以 运行 编码,并使用 asdf 和 quicklisp)。- 我通过 运行ning "
python3 ./install-cl-jupyter.py
" 安装了它。 - 我的
.sbclrc
文件现在只包含“(load "~/quicklisp/setup.lisp")
”。
系统信息:
- OS: Linux 4.1.13-1-MANJARO x86_64 GNU/Linux
- Python 3.5.0
- SBCL 1.3.0
- Jupyter 版本 4.0.6
我尝试过的一些事情:
文件 ~/.ipython/kernels/lisp/kernel.json
包含:
{"argv": ["sbcl", "--non-interactive", "--load", "/home/myusername/lisp/systems/cl-jupyter/cl-jupyter.lisp", "/homemyusername/lisp/systems/cl-jupyter/src", "/home/myusername/lisp/systems/cl-jupyter", "{connection_file}"], "display_name": "SBCL Lisp", "language": "lisp"}
所有路径都是正确的。当我手动 运行 相同的代码时:
sbcl --non-interactive --load "/home/myusername/lisp/systems/cl-jupyter/cl-jupyter.lisp" "/homemyusername/lisp/systems/cl-jupyter/src" "/home/myusername/lisp/systems/cl-jupyter" kernel-07e04903-c562-4c67-bcc1-b68f4047d8d2.json
(其中 "kernel-07e04903-c562-4c67-bcc1-b68f4047d8d2.json" 是我保存的 lisp 内核自动生成的文件),它 "looks ok"(例如它 运行s,并且等待没有错误) .
我尝试进行一些快速调试打印,我最好的猜测是它在 src/shell.lisp
行崩溃
(vbinds (identities sig msg buffers) (message-recv (shell-socket shell))
但是,我可能是错的。因为它看起来有点像与通信有关,所以我确保 zeromq 已更新。
除了学习更多的 lisp,然后回来正确调试代码,我不确定下一步是什么 - 但我希望使用 Jupyter 来学习它:)
如果有任何建议,我将不胜感激, 谢谢。
此问题是由于 0MQ 版本 4 中消息结构 zmq_msg_t
的大小发生变化引起的。1.x 从版本 4 中的 32 字节大小变为 64 字节。0.x.
cl-jupyter
使用的0MQ接口库是pzmq
,据称该库支持0MQ到4.0版本。在撰写本文时,pzmq
使用 32 字节的 0MQ 消息大小。如果安装了 0MQ 版本 4.1.x,这将导致内部错误。
这里有两种解决方案:
- 将 0MQ 安装降级到版本 4。0.x
- 通过将
c-api.lisp
中msg%
的定义从 32 字节更新为 64 字节来修复pzmq
库。
更新 - 2016 年 5 月 9 日
pzmq
库已更新以支持 0MQ 版本 4。1.x,(保持与旧版本的兼容性)。 pzmq
的新版本计划作为 2016 年 5 月 Quicklisp 版本的一部分发布。
更新 - 2016 年 6 月 1 日
2016 年 5 月的 Quicklisp 版本包含解决此问题的 pzmq
库更新。不再需要降级 0MQ 或修改 pzmq
库。