How to install Qt 5.6 and PyQt5 in a Python 3.4 virtual environment on Mac OS X and Linux

This is a simple guide on installing the latest Qt (currently 5.6) and PyQt5 on Mac OS X 10.11 (El Capitan) and Linux with Python 3.4, inside a virtual environment.
Installation Steps
- Python 3
- Xcode and command-line tools
- Qt libraries
- Virtual environment
- SIP Python package
- PyQt5 Python package
Python 3
First of all, make sure that Python 3 is available on your system. You can easily check this by opening the terminal and entering the command python3. If you need to install it, check out the Python homepage, or install it with homebrew (brew install python3) on OS X or your favorite Linux package manager.
Install Xcode and command-line tools
If you are using OS X, download Xcode and install it. Then install the command-line tools by entering the following command in the terminal: xcode-select --install. This adds a number of tools to your system, such as make, git, gcc, c++ and g++.
Install Qt Libraries
First we need to download and install the Qt libraries:
I’d recommend to install Qt into the directory /opt/qt. The installation requires about 14 GB of disk space, and includes a number of apps and utilities:
Qt Creator.app- a complete IDE with a graphical GUI designer and code editor (more)5.6/clang_64/bin/Designer.app- the GUI designer5.6/clang_64/bin/pixeltool.app- a tool to inspect the pixels around the mouse cursor5.6/clang_64/bin/qmlscene- execute scenes from .QML files5.6/clang_64/bin/qtdiag- Prints diagnostic output about the Qt library- Various others such as
qmllint,qmlmin,qmlplugindump,qmlprofiler,qmlscene,qmltestrunner
Furthermore the Qt installation includes a number of examples in the Examples subdirectory.
Create a virtualenv for the PyQt5 and SIP libs
For this guide, we create a virtual environment with Python 3.4 under the home directory in ~/.venv/qtproject:
# Create the directory
$ mkdir -p ~/.venv
# Create the virtual environment
$ python3 -m venv ~/.venv/qtproject
# Activate the virtual environment
$ . ~/.venv/qtproject/bin/activateAt this point, typing the command which python3 should output something like ~/.venv/qtproject/bin/python3.
Install SIP
PyQt requires to have the SIP module installed. SIP is a tool for automatically generating Python bindings for C and C++ libraries.
You can either download the .tar.gz file, or install the latest from the source repository with mercurial (hg):
# Clone the source code
$ cd /tmp/
$ hg clone http://www.riverbankcomputing.com/hg/sip
$ cd sip
# Generate the build configuration
$ python2.7 build.py prepare # build.py is a Python 2 script
$ python3.4 configure.py -d ~/.venv/qtproject/lib/python3.4/site-packages
# Make and install
$ make
$ sudo make install
$ sudo make cleanInstall PyQt5
Finally we get to install the PyQt5 module.
Start by downloading the tar.gz file, in this case PyQt-gpl-5.5.1.tar.gz, and extracting it:
# Extract the tar.gz file
$ tar -xvf PyQt-gpl-5.5.1.tar.gz
# Change into the PyQt source directory
$ cd PyQt-gpl-5.5.1
# Generate the build configuration (make sure to reference 'qmake' from the Qt libs installation directory)
$ python3 configure.py --destdir ~/.venv/qtproject/lib/python3.4/site-packages --qmake /opt/qt/5.6/clang_64/bin/qmake
# Make and install
$ make # this takes a really long time
$ sudo make install
$ sudo make cleanAll Done!
At this point, everything is successfully installed! Now let’s check if everything works by importing PyQt5 from Python 3.4:
~/.venv/qtproject/bin/python3 -c "import PyQt5"And just for the sake of it, let’s build a simple hello world Qt application:
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
if __name__ == "__main__":
app = QApplication()
# Build the window widget
w = QWidget()
w.setGeometry(300, 300, 250, 150) # x, y, w, h
w.setWindowTitle("My First Qt App")
# Add a label with tooltip
label = QLabel("Hello World 🚀", w)
label.setToolTip("This is a <b>QLabel</b> widget with Tooltip")
label.resize(label.sizeHint())
label.move(80, 50)
# Show window and run
w.show()
app.exec_()Save this program as helloqt.py and execute it with python3 helloqt.py (or, if the virtualenv is not activated, with ~/.venv/qtproject/bin/python3 helloqt.py), and be greeted with this:

🎉 Congratulations 🎉
Now have fun with some GUI programming! Here are a few useful next steps:
If you have suggestions or feedback, let me know via @metachris
Update 2016-03-25: python3 -m venv instead of virtualenv
