是否有一种简单的方法可以使用Common Lisp中的Python库?

时间:2011-03-02 22:13:45

标签: python lisp common-lisp ffi

编写Common Lisp代码时,我真正想念的一件事是访问Python库,包括标准库和第三方模块。 CLPython提供了有限的Python功能子集,它排除了大多数库的使用,因此对我来说并不是真的有用。我希望能够从Common Lisp调用Python代码,使其在CPython或PyPy等Python VM中运行。

5 个答案:

答案 0 :(得分:2)

我建议为你的代码编写一个“曝光器”接口,它接受文本并写入文本,以便你可以在命令行上调用它。理想情况下,使用典型的STDIN | STDOUT方法。

我认为这通常是非性能应用程序的最佳方法。

答案 1 :(得分:2)

一个解决方案是python-on-lisp。它应该是ASDF可安装的。它已经维护或更新了几年,因此可能有更好的选择。

答案 2 :(得分:2)

您可能想尝试burgled-batteries,这是Python和Lisp之间的桥梁(FFI绑定等)。

从描述中,“burgled-batteries在Python(特别是Python的CPython实现)和Common Lisp之间提供了一个垫片。”

答案 3 :(得分:1)

我知道这是不同的语言,但你为什么不试试Clojure and Jython :) :)

也许你会找到你想要的自己。

答案 4 :(得分:1)

您可能喜欢async-process,它可以将代码发送到正在运行的Python进程。在Lem editor中使用。

示例用法:

CL-USER> (ql:quickload :async-process)
To load "async-process":
  Load 1 ASDF system:
    async-process
; Loading "async-process"
..................................................
[package async-process].
(:ASYNC-PROCESS)
CL-USER> (in-package async-process)
#<PACKAGE "ASYNC-PROCESS">
ASYNC-PROCESS> (create-process "python")
#.(SB-SYS:INT-SAP #X7FFFEC002830)
ASYNC-PROCESS> (defparameter p *)
#.(SB-SYS:INT-SAP #X7FFFEC002830)
ASYNC-PROCESS> (process-receive-output p)
"Python 2.7.13 (default, Nov 24 2017, 17:33:09) 
[GCC 6.3.0 20170516] on linux2
Type \"help\", \"copyright\", \"credits\" or \"license\" for more information.
>>> "
ASYNC-PROCESS> (process-send-input p "1+1
")
; No value
ASYNC-PROCESS> (process-receive-output p)
"1+1
2
>>> "