pyinstaller: Probleme mit der exe

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
andi007
User
Beiträge: 11
Registriert: Samstag 20. März 2021, 15:19

Moinsen,
ich habe ein Pythonprojekt mittels pyinstaller zu einer Distributionsfähigen Version gebracht.
Aber leider gibt es dabei noch Probleme.
Ich arbeite auf Windows 10.
Ich rufe den Installer mit dieser batchdatei auf:

Code: Alles auswählen

set PYTHONPATH=
set PYTHONHOME=
pyinstaller --onedir --console --debug=all --log-level=DEBUG ats_test_b2b2.spec
und in der spec datei steht folgendes:

Code: Alles auswählen

# -*- mode: python ; coding: utf-8 -*-


block_cipher = None

added_files = [	('agtool_ini.def', '.'), ('scriptkey', '.'), ('scriptkey.pub', '.'), ('server-hostkey', '.'), 
				('DEFS/*.xlsx', 'DEFS'), ('DEFS/*.txt', 'DEFS')
			  ]
			  
added_binaries = [('ICONS/*.jpg', 'ICONS'), ('ICONS/*.png', 'ICONS')]

a = Analysis(['ag_b2b_shop_tool.py'],
             pathex=[],
             binaries=added_binaries,
             datas=added_files,
             hiddenimports=[],
             hookspath=[],
             hooksconfig={},
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=True)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)

exe = EXE(pyz,
          a.scripts, 
          [('v', None, 'OPTION')],
          exclude_binaries=True,
          name='ats_test_b2b',
          debug=True,
          bootloader_ignore_signals=False,
          strip=False,
          upx=True,
          console=True,
          disable_windowed_traceback=False,
          target_arch=None,
          codesign_identity=None,
          entitlements_file=None )
coll = COLLECT(exe,
               a.binaries,
               a.zipfiles,
               a.datas, 
               strip=False,
               upx=True,
               upx_exclude=[],
               name='ats_test_b2b_neu')

Wenn ich die exe im dist-Verzeichnis nun auf meinem PC starte läuft sie fehlerfrei.
(Das Verzeichnis liegt auf einem lokalen Server).
Wenn ich sie auf anderen PCs starte läuft es nicht. Es gibt die folgende Fehlermeldung (Kurzform):

Code: Alles auswählen

[5004] LOADER: PYZ archive: PYZ-00.pyz
[5004] LOADER: Running pyiboot01_bootstrap.py
# PyInstaller: FrozenImporter(V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b\ats_test_b2b.exe?342081)
# os not found in PYZ
Traceback (most recent call last):
  File "PyInstaller\loader\pyiboot01_bootstrap.py", line 25, in <module>
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'os'
[5004] Failed to execute script 'pyiboot01_bootstrap' due to unhandled exception!
[5004] LOADER: OK.
[5004] LOADER: Manually flushing stdout and stderr


Oder hier die komplette Ausgabe:

Code: Alles auswählen

V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu>ats_test_b2b.exe
[2748] PyInstaller Bootloader 3.x
[2748] LOADER: executable is V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\ats_test_b2b.exe
[2748] LOADER: homepath is V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu
[2748] LOADER: _MEIPASS2 is NULL
[2748] LOADER: archivename is V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\ats_test_b2b.exe
[2748] LOADER: Cookie found at offset 0x53AE7
[2748] LOADER: No need to extract files to run; setting extractionpath to homepath
[2748] LOADER: SetDllDirectory(V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu)
[2748] LOADER: Already in the child - running user's code.
[2748] LOADER: Python library: V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\python39.dll
[2748] LOADER: Loaded functions from Python library.
[2748] LOADER: Manipulating environment (sys.path, sys.prefix)
[2748] LOADER: sys.prefix is V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu
[2748] LOADER: Pre-init sys.path is V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip;V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\lib-dynload;V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu
[2748] LOADER: Setting runtime options
[2748] LOADER: Runtime option: v
[2748] LOADER: Initializing python
import _frozen_importlib # frozen
import _imp # builtin
import '_thread' # <class '_frozen_importlib.BuiltinImporter'>
import '_warnings' # <class '_frozen_importlib.BuiltinImporter'>
import '_weakref' # <class '_frozen_importlib.BuiltinImporter'>
import '_io' # <class '_frozen_importlib.BuiltinImporter'>
import 'marshal' # <class '_frozen_importlib.BuiltinImporter'>
import 'nt' # <class '_frozen_importlib.BuiltinImporter'>
import 'winreg' # <class '_frozen_importlib.BuiltinImporter'>
import '_frozen_importlib_external' # <class '_frozen_importlib.FrozenImporter'>
# installing zipimport hook
import 'time' # <class '_frozen_importlib.BuiltinImporter'>
import 'zipimport' # <class '_frozen_importlib.FrozenImporter'>
# installed zipimport hook
# zipimport: found 147 names in 'V:\\Python\\AG_Toolbox\\dev_kompiliert\\ats_test_b2b_neu\\base_library.zip'
import '_codecs' # <class '_frozen_importlib.BuiltinImporter'>
import codecs # loaded from Zip V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip\codecs.pyc
import encodings.aliases # loaded from Zip V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip\encodings\aliases.pyc
import encodings # loaded from Zip V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip\encodings\__init__.pyc
import encodings.utf_8 # loaded from Zip V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip\encodings\utf_8.pyc
import encodings.cp1252 # loaded from Zip V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip\encodings\cp1252.pyc
import '_signal' # <class '_frozen_importlib.BuiltinImporter'>
import encodings.latin_1 # loaded from Zip V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip\encodings\latin_1.pyc
import '_abc' # <class '_frozen_importlib.BuiltinImporter'>
import abc # loaded from Zip V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip\abc.pyc
import io # loaded from Zip V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip\io.pyc
[2748] LOADER: Overriding Python's sys.path
[2748] LOADER: Post-init sys.path is V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\base_library.zip;V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\lib-dynload;V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu
[2748] LOADER: Setting sys.argv
[2748] LOADER: setting sys._MEIPASS
[2748] LOADER: importing modules from CArchive
[2748] LOADER: extracted struct
[2748] LOADER: running unmarshalled code object for struct...
import '_struct' # <class '_frozen_importlib.BuiltinImporter'>
[2748] LOADER: extracted pyimod01_os_path
[2748] LOADER: running unmarshalled code object for pyimod01_os_path...
[2748] LOADER: extracted pyimod02_archive
[2748] LOADER: running unmarshalled code object for pyimod02_archive...
import 'zlib' # <class '_frozen_importlib.BuiltinImporter'>
[2748] LOADER: extracted pyimod03_importers
[2748] LOADER: running unmarshalled code object for pyimod03_importers...
[2748] LOADER: extracted pyimod04_ctypes
[2748] LOADER: running unmarshalled code object for pyimod04_ctypes...
[2748] LOADER: Installing PYZ archive with Python modules.
[2748] LOADER: PYZ archive: PYZ-00.pyz
[2748] LOADER: Running pyiboot01_bootstrap.py
# PyInstaller: FrozenImporter(V:\Python\AG_Toolbox\dev_kompiliert\ats_test_b2b_neu\ats_test_b2b.exe?342081)
# os not found in PYZ
Traceback (most recent call last):
  File "PyInstaller\loader\pyiboot01_bootstrap.py", line 25, in <module>
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'os'
[2748] Failed to execute script 'pyiboot01_bootstrap' due to unhandled exception!
[2748] LOADER: OK.
[2748] LOADER: Manually flushing stdout and stderr
[2748] LOADER: Cleaning up Python interpreter.
# clear builtins._
# clear sys.path
# clear sys.argv
# clear sys.ps1
# clear sys.ps2
# clear sys.last_type
# clear sys.last_value
# clear sys.last_traceback
# clear sys.path_hooks
# clear sys.path_importer_cache
# clear sys.meta_path
# clear sys.__interactivehook__
# restore sys.stdin
# restore sys.stdout
# restore sys.stderr
# cleanup[2] removing sys
# cleanup[2] removing builtins
# cleanup[2] removing _frozen_importlib
# cleanup[2] removing _imp
# cleanup[2] removing _thread
# cleanup[2] removing _warnings
# cleanup[2] removing _weakref
# cleanup[2] removing _io
# cleanup[2] removing marshal
# cleanup[2] removing nt
# cleanup[2] removing winreg
# cleanup[2] removing _frozen_importlib_external
# cleanup[2] removing time
# cleanup[2] removing zipimport
# destroy zipimport
# cleanup[2] removing _codecs
# cleanup[2] removing codecs
# cleanup[2] removing encodings.aliases
# cleanup[2] removing encodings
# destroy encodings
# cleanup[2] removing encodings.utf_8
# cleanup[2] removing encodings.cp1252
# cleanup[2] removing _signal
# cleanup[2] removing encodings.latin_1
# cleanup[2] removing _abc
# cleanup[2] removing abc
# cleanup[2] removing io
# destroy io
# destroy abc
# cleanup[2] removing __main__
# destroy __main__
# cleanup[2] removing struct
# cleanup[2] removing _struct
# cleanup[2] removing pyimod01_os_path
# cleanup[2] removing pyimod02_archive
# cleanup[2] removing zlib
# cleanup[2] removing pyimod03_importers
# cleanup[2] removing pyimod04_ctypes
# destroy _abc
# cleanup[3] wiping pyimod04_ctypes
# cleanup[3] wiping pyimod03_importers
# cleanup[3] wiping zlib
# cleanup[3] wiping pyimod02_archive
# cleanup[3] wiping pyimod01_os_path
# cleanup[3] wiping _struct
# cleanup[3] wiping struct
# cleanup[3] wiping encodings.latin_1
# cleanup[3] wiping _signal
# cleanup[3] wiping encodings.cp1252
# cleanup[3] wiping encodings.utf_8
# cleanup[3] wiping encodings.aliases
# cleanup[3] wiping codecs
# cleanup[3] wiping _codecs
# cleanup[3] wiping time
# cleanup[3] wiping _frozen_importlib_external
# cleanup[3] wiping winreg
# cleanup[3] wiping nt
# cleanup[3] wiping marshal
# cleanup[3] wiping _io
# cleanup[3] wiping _weakref
# cleanup[3] wiping _warnings
# cleanup[3] wiping _thread
# cleanup[3] wiping _imp
# cleanup[3] wiping _frozen_importlib
# destroy _weakref
# cleanup[3] wiping sys
# cleanup[3] wiping builtins
# destroy zlib
# destroy _struct
# destroy _signal
# destroy winreg
# destroy _warnings
# destroy _thread
# destroy nt
# clear sys.audit hooks
Kann mir hier jemand weiterhelfen?

LG Andreas
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Warum setzt du denn vorher `pythonpath` und `pythonhome` als leere Zeichenkette? Denn offensichtlich wird das Modul "os" nicht gefunden. Das ist Teil der Standardbibliothek, die bei dir wohl nicht mit eingepackt wird. Und bei dir funktioniert das, weil du offensichtlich ein global installiertes Python hast.
andi007
User
Beiträge: 11
Registriert: Samstag 20. März 2021, 15:19

sparrow hat geschrieben: Mittwoch 22. Dezember 2021, 18:49 Warum setzt du denn vorher `pythonpath` und `pythonhome` als leere Zeichenkette?
naja, vorher hatte ich diesen Fehler, und da konnte ich in verschiedenen Foren nachlesen, dass es daran liegen kann, dass die beiden Variablen nicht gesetzt sein sollen.

Code: Alles auswählen

Fatal Python error: init_fs_encoding: failed to get the Python codec of the filesystem encoding
Python runtime state: core initialized
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 984, in _find_and_load_unlocked
ModuleNotFoundError: No module named 'encodings'
Dadurch ließ sich dieser Fehler beheben, aber nun kam halt der obige neu dazu :(

LG Andreas
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Wie startest du denn dein Programm (ohne es vorher mit pyinstaller umgewandelt zu haben) und wie führst du pyinstaller aus?
andi007
User
Beiträge: 11
Registriert: Samstag 20. März 2021, 15:19

sparrow hat geschrieben: Mittwoch 22. Dezember 2021, 19:27 Wie startest du denn dein Programm (ohne es vorher mit pyinstaller umgewandelt zu haben)
mittels

Code: Alles auswählen

start pythonw.exe ag_b2b_shop_tool.py
sparrow hat geschrieben: Mittwoch 22. Dezember 2021, 19:27 und wie führst du pyinstaller aus?
Ich rufe den Installer mit dieser batchdatei auf:

Code: Alles auswählen

set PYTHONPATH=
set PYTHONHOME=
pyinstaller --onedir --console --debug=all --log-level=DEBUG ats_test_b2b2.spec
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Eins von beidem in einem virtualenv?
andi007
User
Beiträge: 11
Registriert: Samstag 20. März 2021, 15:19

sparrow hat geschrieben: Mittwoch 22. Dezember 2021, 19:53 Eins von beidem in einem virtualenv?
ich denke schon, ich arbeite mit PyCharm. Ich hatte mir die Umgebung so eingerichtet und versuche nun das Programm halt in eine Form zubringen, dass es auf einem lokalen FileServer liegt und von den lokalen PCs ohne Pythoninstallation aufgerufen werden kann.

ich habe die pyinstaller Aufrufe aber alle über die Windowskonsole ausgeführt.
Benutzeravatar
sparrow
User
Beiträge: 4540
Registriert: Freitag 17. April 2009, 10:28

Was pyinstaller tut: Es nimmt dein Programm + die installierten Module aus deiner Umgebung + den Interpreter aus der Umgebung. Die Umgebung muss schon das sein, was du auführst.

Du musst also in dem virtualenv von pycharm pyinstaller installieren und dort auch ausführen. Möglicherweise geht das auch mit

Code: Alles auswählen

python -m pyinstaller --onedir --console --debug=all --log-level=DEBUG ats_test_b2b2.spec
Und natürlich ohne irgerndwelche Umgebungsvariablen zu verändern, weil die ja durch das virtualenv gesetzt werden.
andi007
User
Beiträge: 11
Registriert: Samstag 20. März 2021, 15:19

hmm, also irgendwie bin ich gerade ein wenig überfragt.

ich habe zwei Wege probiert.

1. Installation von pyinstaller via pip per Windows cmd-Fenster und dann der Aufruf mit der oben angegebenen batchdatei.
Das kompiliert dann gut durch und ich kann die exe auf meinem PC ausführen.

2. Installation von pyinstaller via pip mittels des pycharm-Terminals. Wenn ich nun unter python-packages nachschaue, dann steht da auch pyinstaller mit dabei. Wenn ich dann aber das aufrufe
python -m pyinstaller --onedir --console --debug=all --log-level=DEBUG ats_test_b2b2.spec
bekomme ich die Fehlermeldung
\\sbs\ATS-EDV\Python\AG_Toolbox\DEV ATS NEU\venv\Scripts\python.exe: No module named pyinstaller

Was mache ich hier noch falsch?

Wäre evtl. jemand auch bereit mir via Teamviewer o.ä. gegen Bezahlung unter die Arme zu greifen?

LG Andreas
andi007
User
Beiträge: 11
Registriert: Samstag 20. März 2021, 15:19

also ich habe nun python und pycharm nochmal deinstalliert und neuinstalliert.

Für die Ausführung von PyInstaller habe ich nun in PyCharm ein externes Tool erstellt (https://newbedev.com/configuring-pychar ... yinstaller)

Aufruf von PyInstaller in der venv mit dem Parametern: --onedir --console --debug=all --log-level=DEBUG $FilePath$

Die Ausführung von dem EntwicklungsPC läuft tadellos

Sobald ich von einem anderen PC aus versuche, dann kommt folgende Fehlermeldung:
https://pastebin.com/UjZMQUeb

Ich finde aber keine Möglichkeit wie ich nun das os hinzufügen kann, auch keine Anleitung in google die mir weiterhilft
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Ich wuerde mal auf deren Mailingliste nachfragen, nachdem du alles hier durchgearbeitet hast: https://pyinstaller.readthedocs.io/en/s ... wrong.html

Und es ist ueblicherweise immer auch eine gute Idee, ein minimales Beispiel zu bauen, um zu schauen, ob das Problem in deinem Projekt oder bei Pyinstaller liegt.
andi007
User
Beiträge: 11
Registriert: Samstag 20. März 2021, 15:19

Hi, ich habe gerade mal mit den Verzeichnisrechten rumgespielt. Nachdem ich allen Benutzergruppen Vollzugriff ermöglicht hatte, ging es.
Aber die Fehlermeldung war echt irreführend :(

LG Andi
Antworten