当前位置:  开发笔记 > 编程语言 > 正文

Jupyter和Common Lisp

如何解决《Jupyter和CommonLisp》经验,为你挑选了1个好方法。

我试图安装CL-jupyter(成为共口齿不清内核Jupyter),我不能让它工作:当我打开一个新的口齿不清的笔记本电脑(或更改现有的笔记本电脑的内核),它显示后崩溃以下消息:

[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).

我通过运行" python3 ./install-cl-jupyter.py"来安装它.

我的.sbclrc文件现在只包含" (load "~/quicklisp/setup.lisp")".

系统信息:

操作系统: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内核的自动生成文件),它"看起来不错"(例如它运行,并且等待没有错误).

我试着做一些快速的调试打印,我最好的猜测就是它崩溃src/shell.lisp

 (vbinds (identities sig msg buffers)  (message-recv (shell-socket shell))

但同样,我可能是错的.因为它看起来有点与通信有关,所以我确保更新了zeromq.

除了学习更多的lisp之外,我不确定下一步是什么,然后回来正确调试代码 - 但我希望使用Jupyter学习它:)

我很感激任何建议,谢谢.



1> Stephen Balo..:

此问题是由消息结构的大小更改引起的zmq_msg_t,在0MQ版本4.1.x中,从版本4.0.x中的32字节大小更改为64字节.

cl-jupyteris 使用的0MQ接口库pzmq,并声明该库支持0MQ到4.0版本.在撰写本文时,pzmq使用32字节的0MQ消息大小.如果安装了0MQ版本4.1.x,则会导致内部错误.

这里有两种解决方案:

    将0MQ安装降级到版本4.0.x.

    pzmq通过将msg%in 的定义更新为c-api.lisp32到64个字节来修复库.


更新 - 2016年5月9日

pzmq库已更新为支持0MQ版本4.1.x,(保留与旧版本的兼容性).新版本pzmq计划作为2016年5月Quicklisp版本的一部分发布.


更新 - 2016年6月1日

2016年5月的Quicklisp版本包括pzmq解决此问题的库的更新.pzmq不再需要降级0MQ或对库进行修改.

推荐阅读
pan2502851807
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有