Building a GUI application with PyQt on MacOS

A short how-to on building Python GUI applications on MacOS with PyQt5 and py2app.



PyQt5 depends on Python version 3.5 or greater and to install it together with other components, like py2app, we will be using pip, the python package management system.

First we have to install pip3 for Python version 3.5 with the use of MacPorts, this will automatically pull in Python 3.5 and resolve all its dependencies. Thereafter we will use pip3 to install PyQt5 and py2app.

# install pip3 
sudo port install py35-pip

# install pyqt and py2app
sudo pip-3.5 install pyqt5 py2app

# create a symlink for py2applet
sudo ln -sf /opt/local/Library/Frameworks/Python.framework/Versions/3.5/bin/py2applet /opt/local/bin/py2applet

Building a MacOS application

Building a application bundle is straightforward. First you initialise your project, next you build it.

For development you can create your application bundle in alias mode (with the -A or --alias option), this uses your source and data files in-place. Note that in alias mode it does not create a standalone application, and the application built is not portable to other machines.

To build a standalone application you run it without the alias option.

# cd to your project directory
cd my project/

# create project file
py2applet --make-setup

# build alias mode for development
python3.5 py2app -A

# clean between build
rm -rf build dist

# build release
python3.5 py2app


For convenience you can also set the Python and pip version systemwide with the following commands:

# set the python/pip version systemwide
sudo port select --set python python35
sudo port select --set pip pip35

Thats's it!


Uco Mesdag

A sysadmin by day and a coder by night. Working as a senior Linux system engineer with plus 20 years of experience. I write about Linux, tech, code and other things that have my interest.

You've successfully subscribed to
Great! Next, complete checkout for full access to
Welcome back! You've successfully signed in
Success! Your account is fully activated, you now have access to all content.