Qt for Python & Nuitka#

Nuitka lets you compile your python application into a stand-alone executable. Besides being a Python compiler which provides a fair acceleration, it has the side-effect of acting as an installer as well. Nuitka supports Linux, macOS and Windows.

For more details, see the official documentation.


Install Nuitka via pip with the following command:

pip install nuitka

After installation, the nuitka3 binary is located in your virtual environment’s bin/ directory, or where your Python executable is located. Alternatively, you can also run:

python3 -m nuitka

to achieve the same effect.

Freeze an application#

Nuitka has many options that you can use. To list them all, run nuitka3 -h.

To simply compile a project, you can run:

nuitka3 <programname>

There are two main features:

  • the option to place it in a directory containing the libraries (--standalone)

  • the option to package the whole project (including shared libraries) into one executable file (--onefile)

If you use these options, you need to specify --plugin-enable=pyside6.

Run an example#

Now, consider the following script, named hello.py:

import sys
import random
from PySide6.QtWidgets import (QApplication, QLabel, QPushButton,
                               QVBoxLayout, QWidget)
from PySide6.QtCore import Slot, Qt

class MyWidget(QWidget):
    def __init__(self):

        self.hello = ["Hallo Welt", "你好,世界", "Hei maailma",
            "Hola Mundo", "Привет мир"]

        self.button = QPushButton("Click me!")
        self.text = QLabel("Hello World")

        self.layout = QVBoxLayout()

        # Connecting the signal

    def magic(self):

if __name__ == "__main__":
    app = QApplication(sys.argv)

    widget = MyWidget()
    widget.resize(800, 600)


You don’t have to copy this script. You find it as examples/installer_test/hello.py.

The command line to proceed looks like this:

nuitka3 examples/installer_test/hello.py

This process creates an executable hello.bin and a directory hello.build that you don’t need. You can execute the binary directly.

In order to create a bundle which can be copied onto a machine without any pre-existing installation, run:

nuitka3 --standalone --plugin-enable=pyside6 examples/installer_test/hello.py

This creates an application hello.dist/hello that contains everything needed to run.

To run the application, go to hello.dist/ and run the program:

cd hello.dist

Use the --onefile option if you prefer to have everything bundled into one executable, without the shared libraries next to it. First you need to install:

pip install zstandard

for data compression. Then you can run:

nuitka3 --onefile --plugin-enable=pyside6 examples/installer_test/hello.py

This process takes a bit longer, but in the end you have one executable hello.bin: