Installing Enaml is a straight forward process. It requires few external dependencies, and those which are required are easily installed, with most projects providing binaries or a simple Python setup script. The sections below describe how to install Enaml and all of its dependencies from scratch, starting with the installation of a Python runtime. The instructions assume that the user’s system has a C++ compiler and the Git command line tools installed and available on the system path.

The Easy Way

If installing and building Enaml and its dependencies from scratch is not appealing, the free (and unaffiliated) Anaconda Python distribution provides a complete Python environment which comes with a reasonably recent version of Enaml and a host of other useful packages.

If you have a working C++ compiler, you can install using pip:

$ pip install enaml

Supported Platforms

Enaml is known to run on Windows, OSX, and Linux; and compiles cleanly with MSVC, Clang, GCC, and MinGW. However, primary development of the framework occurs on Windows (7 and 8), so some quirks and bugs may be present on the other platforms. If you encounter a bug, please report it on the Issue Tracker.


Enaml is a Python framework and requires a supported Python runtime. Enaml currently supports Python 2.6 and Python 2.7. Python 3.x support may be added in the future, but is not currently a high priority item.

The most recent Python 2.x series releases are available on the Python Downloads pages. Installers are available for Windows and OSX. Linux users should install Python using their OS package manager.


Setuptools is a Python package which makes installing other Python packages a breeze. Some of the installation instructions below assume that Setuptools has been installed in the target Python environment. Follow the relevant Setuptools Install instructions for adding the package to your system.


The Enaml framework extends the grammar Python language with new declarative syntax constructs. To accomplish this, Enaml has a fully compliant Python 2.7 lexer and parser with added support for the new syntax. These components are built using the PLY parsing tools, which contain Python implementations of lex and yacc.

Ply can be installed with the easy_install command of Setuptools:

C:\> easy_install ply


Enaml’s declarative widgets provide a layer of abstraction on top of the widgets of a toolkit rendering library. While Enaml is architected to be toolkit agnostic, the recommended toolkit library is Qt.

PyQt4 is a robust set of Python bindings to the Qt toolkit. The PyQt Downloads page contains Windows installers which include the Qt binaries. OSX users can install PyQt4 via Homebrew. Linux users should install via the system package manager.

Note for PySide Users

Enaml has unofficial support for using the PySide bindings to Qt. To activate PySide support, set the environment variable QT_API=pyside before starting the Enaml application. Note that the PySide bindings are not nearly as stable as PyQt4 and contain several bugs which can and will cause applications to crash. There are also some API differences between the two libraries. So while some effort is made to support the use of PySide in Enaml, it is “use at your own risk”.


Enaml’s layout engine is built on top of the Cassowary linear constraint optimizer. This is the same algorithm used by the Cocoa Autolayout engine in OSX. Casuarius provides Python bindings to a C++ implementation of the Cassowary algorithm.

The simplest way to install Casuarius is with easy_install:

C:\> easy_install casuarius


Atom is the Python framework which provides the foundational object model for Enaml. Atom objects are extremely lightweight, fast, and support a robust implementation of the Observer Pattern. If these traits seem all too ideal for a project like Enaml, it’s because Enaml was the primary motivation behind the development of Atom.

Cloning and building Atom from source is simple:

C:\> git clone
C:\> cd atom
C:\> python install


The last item on the list is Enaml itself, and it can be installed with just a few commands:

C:\> git clone
C:\> cd enaml
C:\> python install