¿Hay una forma sencilla de usar las bibliotecas de Python de Common Lisp?

Una cosa que realmente extraño al escribir el código Common Lisp es el acceso a las bibliotecas de Python, tanto de la biblioteca estándar como de los módulos de terceros. CLPython proporciona un subconjunto limitado de la funcionalidad de Python que impide el uso de la mayoría de las bibliotecas, por lo que no es realmente útil para mí. Me gustaría poder llamar al código Python desde Common Lisp de manera que se ejecute en una máquina virtual Python como CPython o PyPy.

Una solución es python-on-lisp . Debe ser ASDF-instalable. No se ha mantenido ni actualizado durante un par de años, por lo que puede haber algo mejor disponible.

Yo sugeriría escribir una interfaz de “expositor” para su código que toma texto y escribe texto para que pueda llamarlo en la línea de comandos. Idealmente, con una típica STDIN | Enfoque de reposo.

Creo que ese suele ser el mejor enfoque para aplicaciones que no son de rendimiento.

Es posible que desee probar las baterías desbastadas , un puente entre Python y Lisp (enlaces FFI, etc.).

A partir de la descripción, ” burgled-batteries proporciona un shim entre Python (específicamente, la implementación CPython de Python) y Common Lisp”.

Sé que estos son idiomas diferentes, pero ¿por qué no le das una oportunidad a Clojure y Jython 🙂 🙂

Quizás encuentres tu yo exactamente donde quieres.

Es posible que le guste un proceso asíncrono , que permite enviar código a un proceso Python en ejecución. Se utiliza en el editor de Lem .

Ejemplo de uso:

 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) # 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 >>> "