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:
Send a normal ZIP file with the application’s content.
Build a proper Python package (wheel).
Freeze the application into a single binary file or directory.
Provide native installer (msi, dmg)
If you are considering Option 3, then starting with 6.4, we ship a new tool called pyside6-deploy that deploys your PySide6 application to all desktop platforms - Windows, Linux, and macOS. To know more about how to use the tool see pyside6-deploy: the deployment tool for Qt for Python. For Android deployment, see pyside6-android-deploy: the Android deployment tool for Qt for Python. Additionally, you can also use other popular deployment tools shown below:
Although you can deploy PySide6 application using these tools, it is recommended to use pyside6-deploy as it is easier to use and also to get the most optimized executable. 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 | Qt 6 | Qt 5 | Linux | macOS | Windows |
---|---|---|---|---|---|---|
fbs |
GPL |
yes |
yes |
yes |
yes |
|
PyInstaller |
GPL |
partial |
yes |
yes |
yes |
yes |
cx_Freeze |
MIT |
yes |
yes |
yes |
yes |
yes |
py2exe |
MIT |
partial |
partial |
no |
no |
yes |
py2app |
MIT |
yes |
yes |
no |
yes |
no |
briefcase |
BSD3 |
partial |
yes |
yes |
yes |
yes |
Nuitka |
MIT |
yes |
yes |
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: