diff options
author | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-04-24 14:24:06 +0200 |
---|---|---|
committer | Friedemann Kleint <Friedemann.Kleint@qt.io> | 2019-04-24 14:24:09 +0200 |
commit | 8b892f71b749a623724ccecca881972a33c9d559 (patch) | |
tree | 88d7a2371481cafd559d4895efa41b6f166ed8ac /sources/pyside2/doc/deployment-pyinstaller.rst | |
parent | fff6ea0059b7394869166a01674a9afa230bc3a9 (diff) | |
parent | a7038d87ba6ec3b2beeee166930c24f290f6478f (diff) |
Merge remote-tracking branch 'origin/5.12' into 5.13
Change-Id: I28805a29caa05e996b490ba46e27ddbc243cc074
Diffstat (limited to 'sources/pyside2/doc/deployment-pyinstaller.rst')
-rw-r--r-- | sources/pyside2/doc/deployment-pyinstaller.rst | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/sources/pyside2/doc/deployment-pyinstaller.rst b/sources/pyside2/doc/deployment-pyinstaller.rst new file mode 100644 index 000000000..8e6a76052 --- /dev/null +++ b/sources/pyside2/doc/deployment-pyinstaller.rst @@ -0,0 +1,124 @@ +======================= +|project| & PyInstaller +======================= + +`PyInstaller <https://www.pyinstaller.org/>`_ allows you to freeze your python +application into a stand-alone executable. +The supported platforms are Linux, macOS, Windows, FreeBSD, and others. + +One of the main goals of `PyInstaller` is to be compatible with 3rd-party +Python modules, e.g.: |pymodname|. + +You can read the `official documentation <https://www.pyinstaller.org/documentation.html>`_ +to clarify any further question, and remember to contribute to +`the project <https://github.com/pyinstaller/pyinstaller>`_ +by filing issues if you find any, or contributing to their development. + +Preparation +=========== + +Installing `PyInstaller` can be done via **pip**:: + + pip install pyinstaller + +If you are using a virtual environment, remember to activate it before +installing `PyInstaller` into it. + +After the installation, the `pyinstaller` binary will be located in the `bin/` +directory of your virtual environment, or where your Python executable is located. + +If that directory is not in your `PATH`, you need to include the whole path +when executing `pyinstaller`. + +.. warning:: If you already have PySide2 or Shiboken2 installed in your system, PyInstaller will pick them + instead of your virtual environment ones. + +Freezing an application +======================= + +`PyInstaller` has many options that you can use. +To learn more about them you can just run `pyinstaller -h`. + +Two main features are the option to package the whole project +(including the shared libraries) into one executable file (`--onefile`), +and to prepare a directory that will contain +an executable next to all the used libraries. + +Additionally, for Windows you can enable opening a console during the +execution with the option `-c` (or equivalent `--console` or `--nowindowed`). +Further, you can specify to not open such console window +on macOS and Windows with the option `-w` (or equivalent `--windowed` or `--noconsole`). + +Creating an example +------------------- + +Now, consider the following simple script, named `hello.py`:: + + import sys + import random + from PySide2.QtWidgets import (QApplication, QLabel, QPushButton, + QVBoxLayout, QWidget) + from PySide2.QtCore import Slot, Qt + + class MyWidget(QWidget): + def __init__(self): + QWidget.__init__(self) + + self.hello = ["Hallo Welt", "你好,世界", "Hei maailma", + "Hola Mundo", "Привет мир"] + + self.button = QPushButton("Click me!") + self.text = QLabel("Hello World") + self.text.setAlignment(Qt.AlignCenter) + + self.layout = QVBoxLayout() + self.layout.addWidget(self.text) + self.layout.addWidget(self.button) + self.setLayout(self.layout) + + # Connecting the signal + self.button.clicked.connect(self.magic) + + @Slot() + def magic(self): + self.text.setText(random.choice(self.hello)) + + if __name__ == "__main__": + app = QApplication(sys.argv) + + widget = MyWidget() + widget.resize(800, 600) + widget.show() + + sys.exit(app.exec_()) + + +Since it has a UI, we will use the `--windowed` option. + +The command line to proceed will look like this:: + + pyinstaller --name="MyApplication" --windowed hello.py + +This process will create a `dist/` and `build/` directory. +The executable and all the shared libraries required by your application +will be placed inside `dist/MyApplication`. + +To execute the frozen application you can go inside `dist/MyApplication` and +execute the program:: + + cd dist/MyApplication/ + ./MyApplication + +.. note:: The directory inside `dist/` and the executable will have the same name. + +If you prefer to have everything bundled into one executable, i.e.: +no shared libraries next to the executable, you can use the option +`--onefile`:: + + pyinstaller --name="MyApplication" --windowed --onefile hello.py + +This process will take a bit longer, but in the end you will discover +an executable inside the `dist/` directory that you can execute:: + + cd dist/ + ./MyApplication |