Fehlermeldung "Fatal Python error: Py_Initialize: unable to load the file system codec" in Python-App

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
beatrix.w
User
Beiträge: 16
Registriert: Freitag 2. Mai 2014, 15:23

Habe mal wieder eine einfache Frage. Wenn ich mein Python-Progrämmchen im Terminal ausführe, bekomme ich die Fehlermeldung

Fatal Python error: Py_Initialize: unable to load the file system codec
zipimport.ZipImportError: can't decompress data; zlib not available

Current thread 0x00007fff72d82000 (most recent call first):
Abort trap: 6

Goggle verrät mir folgendes: https://stackoverflow.com/questions/569 ... ec#5694730

"Check PYTHONPATH and PYTHONHOME system variable and make sure it doesn't points to Python 2.x"

Was muß ich da für mein Programm ändern? Das ist mit Python 3.6 gebaut und kann ja an unterschiedlichen Orten ausgeführt werden.

Mit freundlichen Grüßen/Regards

Beatrix Willius

http://www.mothsoftware.com
Mail Archiver X: The email archiving solution for professionals
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@beatrix.w: Welchen Wert haben denn die Umgebungsvariablen PYTHONPATH und PYTHONHOME wenn das passiert?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
beatrix.w
User
Beiträge: 16
Registriert: Freitag 2. Mai 2014, 15:23

Wie mache ich das denn für ein Programm, daß beim Start abstürzt?

Goggle hat mir verraten, daß ich an die Umgebungsvariablen mit

import os
print(os.environ)

drankomme. Das funktioniert in Pycharm auch gut:

environ({'PATH': '/Users/beatrixwillius/PycharmProjects/ftfy/venv/bin:/Library/Frameworks/Python.framework/Versions/3.6/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin', 'IDE_PROJECT_ROOTS': '/Users/beatrixwillius/PycharmProjects/ftfy', 'COMMAND_MODE': 'unix2003', 'PS1': '(venv) ', 'PYDEVD_LOAD_VALUES_ASYNC': 'True', 'VERSIONER_PYTHON_VERSION': '2.7', 'LIBRARY_ROOTS': '/Users/beatrixwillius/PycharmProjects/ftfy/venv/lib/python3.6:/Users/beatrixwillius/PycharmProjects/ftfy/venv/lib/python3.6/lib-dynload:/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6:/Users/beatrixwillius/PycharmProjects/ftfy/venv/lib/python3.6/site-packages:/Users/beatrixwillius/Library/Caches/PyCharmCE2018.2/python_stubs/440645732:/Applications/Develop/PyCharm CE.app/Contents/helpers/python-skeletons:/Applications/Develop/PyCharm CE.app/Contents/helpers/typeshed/stdlib/3.4:/Applications/Develop/PyCharm CE.app/Contents/helpers/typeshed/stdlib/3:/Applications/Develop/PyCharm CE.app/Contents/helpers/typeshed/stdlib/2and3:/Applications/Develop/PyCharm CE.app/Contents/helpers/typeshed/third_party/3:/Applications/Develop/PyCharm CE.app/Contents/helpers/typeshed/third_party/2and3', 'LOGNAME': 'beatrixwillius', 'XPC_SERVICE_NAME': 'com.jetbrains.pycharm.50272', 'PWD': '/Users/beatrixwillius/PycharmProjects/ftfy', 'PYCHARM_HOSTED': '1', 'PYTHONPATH': '/Users/beatrixwillius/PycharmProjects/ftfy:/Applications/Develop/PyCharm CE.app/Contents/helpers/pydev:/Users/beatrixwillius/Library/Caches/PyCharmCE2018.2/cythonExtensions', 'SHELL': '/bin/bash', 'PYTHONIOENCODING': 'UTF-8', 'SECURITYSESSIONID': '186a7', 'VERSIONER_PYTHON_PREFER_32_BIT': 'no', 'USER': 'beatrixwillius', 'IPYTHONENABLE': 'True', 'TMPDIR': '/var/folders/yr/t1mywwrs1s1d0qv8cwv928240000gn/T/', 'PYTHONDONTWRITEBYTECODE': '1', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.tSkfsCWZDK/Listeners', 'VIRTUAL_ENV': '/Users/beatrixwillius/PycharmProjects/ftfy/venv', 'XPC_FLAGS': '0x0', 'PYTHONUNBUFFERED': '1', '__CF_USER_TEXT_ENCODING': '0x1F5:0x0:0x3', 'Apple_PubSub_Socket_Render': '/private/tmp/com.apple.launchd.aIUjHqY4df/Render', 'LC_CTYPE': 'de_DE.UTF-8', 'HOME': '/Users/beatrixwillius'})

Ich habe den Code in mein Programm gemacht und bekomme die gleiche Fehlermeldung, wenn ich das Ding ausführe.

Zum Erstellen des Programms benutze ich Py2App. Ist da irgendein Problem? Das sollte doch Python zum Programm "packen".

Code: Alles auswählen

from setuptools import setup

APP = ['/Users/beatrixwillius/PycharmProjects/ftfy/fix_encoding.py']
DATA_FILES = []
OPTIONS = {'argv_emulation': True}

setup(
    app=APP,
    data_files=DATA_FILES,
    options=dict(py2app=dict(plist=dict(CFBundleVersionString='4.3.0', CFBundleVersion='4.3.0', CFBundleIdentifier='com.mothsoftware.fix_encoding', ), )),
    setup_requires=['py2app'],
)
Mit freundlichen Grüßen/Regards

Beatrix Willius

http://www.mothsoftware.com
Mail Archiver X: The email archiving solution for professionals
Benutzeravatar
__blackjack__
User
Beiträge: 13004
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Die Umgebungsvariablen von innerhalb eines Python-Programms das nicht läuft auszugeben, macht nicht so viel Sinn wenn es gar nicht erst startet. :-) Die Frage ist ja welchen Wert die beim/vorm Start haben. Ich weiss nicht was MacOS als Shell verwendet, aber normalerweise muss man ein $ voranstellen um Umgebungs-/Shellvariablen zu dereferenzieren. Also zum Beispiel ``echo "$PYTHONPATH"``.

Anwendungen wie Py2App können da tatsächlich einen Einfluss drauf haben, denn wenn die Python mitliefern, müssen sie ja sicherstellen, dass das mitgelieferte Python verwendet wird, und nicht ein eventuell auf dem System schon vorhandenes. Und `venv` hat auch mit diesen Umgebungsvariablen zu tun um alles auf die virtuelle Umgebung ”umzubiegen”. Vertragen sind Py2App und `venv` denn? Und falls ja, muss man eventuell etwas beachten wenn man eine Anwendung aus einer virtuellen Umgebung als App verpackt?
“Most people find the concept of programming obvious, but the doing impossible.” — Alan J. Perlis
beatrix.w
User
Beiträge: 16
Registriert: Freitag 2. Mai 2014, 15:23

Daß das keinen Sinn macht, habe ich auch gemerkt. Aber ich wollte ja wissen, was im Programm passiert. Wenn ich meinen Code in PyCharm ausführe, funktioniert alles.

Vielleicht ist das Problem die Shell. Mein Programm wird in Xojo, einem Mac-IDE, ausgeführt. Die Docs sagen dazu:

The Shell is not equivalent to the Terminal or Command app for your OS. Paths and other default settings will likely not be the same. If you need to do configuration of the Shell before you use it, be sure to set it up to be interactive so you can set up the configuration before calling other shell commands.

Jetzt bin ich noch mehr verwirrt als vorher.

Mit freundlichen Grüßen/Regards

Beatrix Willius

http://www.mothsoftware.com
Mail Archiver X: The email archiving solution for professionals
__deets__
User
Beiträge: 14493
Registriert: Mittwoch 14. Oktober 2015, 14:29

Es gibt eine py2app-Option "-A",

python setup.py py2app -A

mit der wird nur ein "alias" angelegt, d.h. es wird nicht gebuendelt, sondern nur verlinkt. Dadurch ist der Python-Interpreter der normale, etc. Wenn das Problem da *nicht* auftaucht, dann koennte das eine Erklaerung sein.

Traditionell habe ich bei py2app auch auf venvs verzichtet, aber das mag inzwischen Aberglauben sein. Und Roland Oussoren, der Autor von py2app, hat auch gerade eine neue Version veroeffentlicht AFAIK. Vielleicht lohnt ein upgrade.
beatrix.w
User
Beiträge: 16
Registriert: Freitag 2. Mai 2014, 15:23

Nach fast einem Tag Spaß habe ich die Ursache für das Problem gefunden. Ich habe das Python-Programm in den Ordner Content/Library/Helpers mit einem sogenannten "Copy-Script" von Xojo kopiert. Irgendwann fiel mir auf, daß das Python-Programm vor dem Kopieren 20 MB groß war und nach dem Kopieren 13 MB. Nun mache ich ein "ditto" und alles funktioniert.

Mit freundlichen Grüßen/Regards

Beatrix Willius

http://www.mothsoftware.com
Mail Archiver X: The email archiving solution for professionals
Antworten