Qt for Python Deployment

Deploying or freezing an application is an important part of a Python project, this means to bundle all required resources so that the application finds everything it needs to be able to run on a client’s machine. However, because most large projects aren’t based on a single Python file, distributing these applications can be a challenge.

Here are a few distribution options that you can use:
  1. Send a normal ZIP file with the application’s content.

  2. Build a proper Python package (wheel).

  3. Freeze the application into a single binary file or directory.

  4. Provide native installer (msi, dmg)

If you choose Option 3, consider using one of these tools:

Since Qt for Python is a cross-platform framework, we focus on solutions for the three major platforms that Qt supports: Windows, Linux, and macOS.

The following table summarizes the platform support for those packaging tools:

Name License Linux macOS Windows

fbs

GPL

yes

yes

yes

PyInstaller

GPL

yes

yes

yes

cx_Freeze

MIT

yes

yes

yes

py2exe

MIT

no

no

yes

py2app

MIT

no

yes

no

briefcase

BSD3

yes

yes

yes

Notice that only fbs, cx_Freeze, briefcase, and PyInstaller meet our cross-platform requirement.

Since these are command-line tools, you’ll need special hooks or scripts to handle resources such as images, icons, and meta-information, before adding them to your package. Additionally, these tools don’t offer a mechanism to update your application packages.

To create update packages, use the PyUpdater, which is a tool built around PyInstaller.

The fbs tool offers a nice UI for the user to install the application step-by-step.

Note

Deployment is supported only from Qt for Python 5.12.2 and later.

Here’s a set of tutorials on how to use these tools: