Version 11 (modified by wbroekema, 8 years ago)


CLPython - an implementation of Python in Common Lisp

CLPython is an implementation of the Python programming language in Common Lisp. It is developed by Willem Broekema with support from  Franz Inc. CLPython is released under the  LLGPL.

About Python

 Python is both a programming language and the name of the reference implementation; the implementation is sometimes called "CPython" to differentiate the two. Some other implementations are  Jython (Java) and  IronPython (C# on .NET/Mono). Each of these implementations has platform-specific features. For example, Jython offers a nice integration between Python and Java classes, and other data types. In the same way, CLPython will offer integration of Python with Lisp.

Besides these "stand-alone" compilers, there are also "bridges" between Python and other languages. For example,  Python-on-Lisp is a bridge between Lisp and CPython which allows execution of Python code in Lisp programs.


CLPython currently requires  Allegro Common Lisp 8.0 (the trial version is ok), as it depends on the yacc and support for environments in Allegro CL. The intention is to support more Lisp environments in the future.

A large part of the Python language features is implemented by CLPython (basic data types, functions, classes, metaclasses, generators, closures, ...). Many recently introduced features are still missing (e.g. "y = yield x"). The intention is to add these features to CLPython.

At the moment the most important functionality offered is the read-eval-print loop (called "interpreter" in the Python world), similar to the one from CPython. You can execute statements there, including import of .py files. Work on really bridging the Python and Lisp worlds in a powerful way is ongoing. Python modules written in C can not be used with CLPython.


There is no public CVS directory at the moment; the intention is to offer that in the future. You can download a "snapshot" of CLPython as sources or as precompiled fasl file. Both require Allegro CL 8.0.

  • clpython_DATE.tgz - the sources, released under the  LLGPL
  • clpython_DATE.fasl - Allegro 8.0 fasl file, to be loaded in a "Modern" image

Mailing lists

For general discussion and reporting of bugs, there is  clpython-devel.
To be informed about new releases, please subscribe to  clpython-announce.

Example Usage

The way to start up the CLPython read-eval-print loop depends on whether you have the sources or the precompiled fasl.

* Sources:

:ld load ;; compile and load the .cl files
:pa :python 

* Fasl:

:ld clpython_DATE
:pa :python

Below, a sample interaction with the read-eval-print loop is shown.

python(7): (repl)
[CLPython -- type `:q' to quit, `:help' for help]
>>> print "hello world!"
hello world!
>>> def fact(n):
...   if n <= 1:
...     return 1
...   else:
...     return n * fact(n-1)
#<python-function fact @ #x71d67c9a>
>>> fact(6)
>>> :q

Trac Starting Points

For a complete list of local wiki pages, see TitleIndex.