Also: Ich habe ein Programm mit Python unter Linux Mint erstellt, welches mehrere im QT Designer erstellte Forms verwendet. Das ganze läuft in einem virtuellen Environment. Dort sind alle erforderlichen Abhängigkeiten installiert. Im Idle gestartet läuft das ganze super. Im Hauptscript ist ein SheBang enthalten, so dass ich das Script auch in der Bash mit "./main.py" starten kann - auch das funktioniert einwandfrei.
Jetzt habe ich es gewagt, zu versuchen, daraus mittels pyinstaller und dem Befehl "pyinstaller --onefile main.py" eine ausführbare Datei zu erstellen. Der Befehl wurde aus dem laufenden venv gestartet. Beim Versuch, diese Datei in der Bash mittels "./main" zu starten, erscheint folgende Fehlermeldung:
Traceback (most recent call last):
File "main.py", line 4, in <module>
from PySide6.QtWidgets import QApplication, QMainWindow, QListWidget, QDialog
ModuleNotFoundError: No module named 'PySide6'
[PYI-32259:ERROR] Failed to execute script 'main' due to unhandled exception!
Warum kommt es dazu? Gefunden habe ich bislang nur Antworten im Netz, die sich auf ein überhaupt gar nicht installiertes Paket PySide6 bezogen und wie man es installieren kann. Es ist aber ja installiert.
Installiert in das venv sind folgende Pakete:
PyQt6==6.10.0
PyQt6-Qt6==6.10.0
PyQt6-WebEngine==6.10.0
PyQt6-WebEngine-Qt6==6.10.0
PyQt6_sip==13.10.2
PySide6==6.10.1
PySide6_Addons==6.10.1
PySide6_Essentials==6.10.1
shiboken6==6.10.1
PySide6 ist also auf jeden Fall vorhanden, wird aber irgendwie nicht vom pyinstaller berücksichtigt. Wie komme ich nun aus der Nummer raus?
Mit pyinstaller erstellte Binary gibt "ModuleNotFoundError: No module named 'PySide6'" aus
-
Easter Frisian
- User
- Beiträge: 8
- Registriert: Samstag 8. November 2025, 19:54
Nun, den Befehl zum erstellen der ausführbaren Datei habe ich ja genannt: pyinstaller --onefile main.py
//Wie sieht die Ausgabe beim Erstellen aus...//
Nun, ich habe eine Datei "warn-main.txt" gefunden im Build-Ordner. Ich denke, da erklärt sich schon was:
//This file lists modules PyInstaller was not able to find. This does not
necessarily mean this module is required for running your program. Python and
Python 3rd-party packages include a lot of conditional or optional modules. For
example the module 'ntpath' only exists on Windows, whereas the module
'posixpath' only exists on Posix systems.
Types if import:
* top-level: imported at the top-level - look at these first
* conditional: imported within an if-statement
* delayed: imported within a function
* optional: imported within a try-except-statement
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
tracking down the missing module yourself. Thanks!
missing module named pyimod02_importers - imported by /home/effeff/.local/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py (delayed)
missing module named winreg - imported by importlib._bootstrap_external (conditional)
missing module named nt - imported by os (delayed, conditional, optional), ntpath (optional), shutil (conditional), importlib._bootstrap_external (conditional)
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
missing module named _winapi - imported by encodings (delayed, conditional, optional), ntpath (optional), shutil (conditional), subprocess (conditional)
missing module named msvcrt - imported by subprocess (optional)
missing module named 'PySide6.QtWidgets' - imported by frmMain (top-level), frmAddMagazine (top-level), frmAddGenre (top-level), frmDeleteMagazine (top-level)
missing module named 'PySide6.QtGui' - imported by frmMain (top-level), frmAddMagazine (top-level), frmAddGenre (top-level), frmDeleteMagazine (top-level)
missing module named 'PySide6.QtCore' - imported by frmMain (top-level), frmAddMagazine (top-level), frmAddGenre (top-level), frmDeleteMagazine (top-level)
missing module named 'PySide6.QtWebEngineWidgets' - imported by frmMain (top-level)
missing module named 'PySide6.QtWebEngineCore' - imported by /home/effeff/Python/MainWindow/main.py (top-level)
missing module named PySide6 - imported by /home/effeff/Python/MainWindow/main.py (top-level)//
Das spec-File sieht so aus:
//# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,//
//Wie sieht die Ausgabe beim Erstellen aus...//
Nun, ich habe eine Datei "warn-main.txt" gefunden im Build-Ordner. Ich denke, da erklärt sich schon was:
//This file lists modules PyInstaller was not able to find. This does not
necessarily mean this module is required for running your program. Python and
Python 3rd-party packages include a lot of conditional or optional modules. For
example the module 'ntpath' only exists on Windows, whereas the module
'posixpath' only exists on Posix systems.
Types if import:
* top-level: imported at the top-level - look at these first
* conditional: imported within an if-statement
* delayed: imported within a function
* optional: imported within a try-except-statement
IMPORTANT: Do NOT post this list to the issue-tracker. Use it as a basis for
tracking down the missing module yourself. Thanks!
missing module named pyimod02_importers - imported by /home/effeff/.local/lib/python3.12/site-packages/PyInstaller/hooks/rthooks/pyi_rth_pkgutil.py (delayed)
missing module named winreg - imported by importlib._bootstrap_external (conditional)
missing module named nt - imported by os (delayed, conditional, optional), ntpath (optional), shutil (conditional), importlib._bootstrap_external (conditional)
excluded module named _frozen_importlib - imported by importlib (optional), importlib.abc (optional), zipimport (top-level)
missing module named _frozen_importlib_external - imported by importlib._bootstrap (delayed), importlib (optional), importlib.abc (optional), zipimport (top-level)
missing module named _winapi - imported by encodings (delayed, conditional, optional), ntpath (optional), shutil (conditional), subprocess (conditional)
missing module named msvcrt - imported by subprocess (optional)
missing module named 'PySide6.QtWidgets' - imported by frmMain (top-level), frmAddMagazine (top-level), frmAddGenre (top-level), frmDeleteMagazine (top-level)
missing module named 'PySide6.QtGui' - imported by frmMain (top-level), frmAddMagazine (top-level), frmAddGenre (top-level), frmDeleteMagazine (top-level)
missing module named 'PySide6.QtCore' - imported by frmMain (top-level), frmAddMagazine (top-level), frmAddGenre (top-level), frmDeleteMagazine (top-level)
missing module named 'PySide6.QtWebEngineWidgets' - imported by frmMain (top-level)
missing module named 'PySide6.QtWebEngineCore' - imported by /home/effeff/Python/MainWindow/main.py (top-level)
missing module named PySide6 - imported by /home/effeff/Python/MainWindow/main.py (top-level)//
Das spec-File sieht so aus:
//# -*- mode: python ; coding: utf-8 -*-
a = Analysis(
['main.py'],
pathex=[],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
hooksconfig={},
runtime_hooks=[],
excludes=[],
noarchive=False,
optimize=0,
)
pyz = PYZ(a.pure)
exe = EXE(
pyz,
a.scripts,
a.binaries,
a.datas,
[],
name='main',
debug=False,
bootloader_ignore_signals=False,
strip=False,
upx=True,
upx_exclude=[],
runtime_tmpdir=None,
console=True,
disable_windowed_traceback=False,
argv_emulation=False,
target_arch=None,
codesign_identity=None,
entitlements_file=None,//
-
Easter Frisian
- User
- Beiträge: 8
- Registriert: Samstag 8. November 2025, 19:54
Der pyinstaller IST in dem venv installiert. Immerhin hat dieser die anderen Module dort ebenfalls installiert - die Module, die bei der Erstellung der Binary nicht mehr gefunden werden können.
QED - der erneute Versuch, pyinstaller in venv zu installieren, gibt folgende Meldung aus:
//requirement already satisfied: pyinstaller in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (6.17.0)
Requirement already satisfied: altgraph in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (from pyinstaller) (0.17.5)
Requirement already satisfied: packaging>=22.0 in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (from pyinstaller) (25.0)
Requirement already satisfied: pyinstaller-hooks-contrib>=2025.9 in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (from pyinstaller) (2025.11)
Requirement already satisfied: setuptools>=42.0.0 in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (from pyinstaller) (80.9.0)//
QED - der erneute Versuch, pyinstaller in venv zu installieren, gibt folgende Meldung aus:
//requirement already satisfied: pyinstaller in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (6.17.0)
Requirement already satisfied: altgraph in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (from pyinstaller) (0.17.5)
Requirement already satisfied: packaging>=22.0 in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (from pyinstaller) (25.0)
Requirement already satisfied: pyinstaller-hooks-contrib>=2025.9 in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (from pyinstaller) (2025.11)
Requirement already satisfied: setuptools>=42.0.0 in /home/nutzername/Python/GUITest/venv/lib/python3.12/site-packages (from pyinstaller) (80.9.0)//
-
Easter Frisian
- User
- Beiträge: 8
- Registriert: Samstag 8. November 2025, 19:54
@sparrow: OK, das ist mir nun selber aufgefallen; Der Versuch, im gestarteten venv den pyinstaller zu installieren, schreibt ja, dass dieser bereits installiert ist - aber in einem ganz anderen Verzeichnis. Tja, an Python muss ich mich noch erst gewöhnen.
Die Lösung in diesem Fall: Ich hatte aus einem anderen Projekt Daten kopiert - inklusive venv. Deswegen wurde der pyinstaller aus einem ganz anderen Verzeichnis benutzt - dessen venv natürlich nicht gestartet war und dessen Abhängigkeiten nicht gefunden werden konnten. Ich setzte das Projekt nun neu auf, installiere brav ein neues venv und stelle dann die Abhängigkeiten aus der requirements.txt wieder her.
Danke schön für Deine Hilfe!
Die Lösung in diesem Fall: Ich hatte aus einem anderen Projekt Daten kopiert - inklusive venv. Deswegen wurde der pyinstaller aus einem ganz anderen Verzeichnis benutzt - dessen venv natürlich nicht gestartet war und dessen Abhängigkeiten nicht gefunden werden konnten. Ich setzte das Projekt nun neu auf, installiere brav ein neues venv und stelle dann die Abhängigkeiten aus der requirements.txt wieder her.
Danke schön für Deine Hilfe!
-
Easter Frisian
- User
- Beiträge: 8
- Registriert: Samstag 8. November 2025, 19:54
Und der letzte Fehler ist nun wohl auch gefunden: Auch in der neuen Umgebung kam es zum gleichen Fehler - allerdings kommt hier beim Versuch, die Binärdatei zu erzeugen, folgende Meldung:
//ERROR: Aborting build process due to attempt to collect multiple Qt bindings packages: attempting to run hook for 'PyQt6', while hook for 'PySide6' has already been run! PyInstaller does not support multiple Qt bindings packages in a frozen application - either ensure that the build environment has only one Qt bindings package installed, or exclude the extraneous bindings packages via the module exclusion mechanism (--exclude command-line option, or excludes list in the spec file).//
Im Gegensatz zu einer py-Datei, die problemlos ausgeführt werden kann, muss beim erzeugen einer Binärdatei also darauf geachtet werden, dass nicht PyQt6 und PySide6 gleichzeitig benutzt werden!
//ERROR: Aborting build process due to attempt to collect multiple Qt bindings packages: attempting to run hook for 'PyQt6', while hook for 'PySide6' has already been run! PyInstaller does not support multiple Qt bindings packages in a frozen application - either ensure that the build environment has only one Qt bindings package installed, or exclude the extraneous bindings packages via the module exclusion mechanism (--exclude command-line option, or excludes list in the spec file).//
Im Gegensatz zu einer py-Datei, die problemlos ausgeführt werden kann, muss beim erzeugen einer Binärdatei also darauf geachtet werden, dass nicht PyQt6 und PySide6 gleichzeitig benutzt werden!
@"Easter Frisian": Man sollte in einem Projekt niemals PySide und PyQt einsetzen. Wenn du das in deinem Projekt tust, ist das falsch. Ich sehe auch keinen Grund, warum das sinnvoll sein könnte.
Noch ein hinweis, weilldu von einer "Binärdatei" sprichst noch ein Hinweis: Pyinstaller kompiliert nichts. Es packt nur dein Script zusammen mit den nötigen Bibliotheken in ein selbstentpackendes Archiv. Beim Start wird dieses Archiv dann in ein temporäres Verzeichnis entpackt und dort ausgeführt. Das hat nichts mit einem klassischen Compiler zu tun und ist auch nicht die übliche Art Python Programme zu verteilen.
Noch ein hinweis, weilldu von einer "Binärdatei" sprichst noch ein Hinweis: Pyinstaller kompiliert nichts. Es packt nur dein Script zusammen mit den nötigen Bibliotheken in ein selbstentpackendes Archiv. Beim Start wird dieses Archiv dann in ein temporäres Verzeichnis entpackt und dort ausgeführt. Das hat nichts mit einem klassischen Compiler zu tun und ist auch nicht die übliche Art Python Programme zu verteilen.
-
Easter Frisian
- User
- Beiträge: 8
- Registriert: Samstag 8. November 2025, 19:54
@sparrow: Was ist die übliche Art, Python-Programme (-Scripts) zu verteilen?
