2017-11-17 3 views
0

Ich habe ein Konsolenmodus-Programm, das ich mit cx_Freeze verteilen möchte. Ich habe gerade Python 3.6.3 (beide AMD64 und Win32-Version) auf einem neu installierten Win 10-Rechner heruntergeladen. Ich habe cx_Freeze 5.1 von Rädern installiert (nicht von Pypi). Dann habe ich sowohl amd64 als auch win32 Versionen des Programms erstellt. Wenn ich versuche, dass die EXE-Datei auf demselben Computer auszuführen, wo ich es gebaut habe, bekomme ich diesen Fehler:cx_freeze: ModuleNotFoundError und Programm funktioniert nicht mehr

Fatal Python error: Py_Initialize: unable to load the file system codec 
Traceback (most recent call last): 
    File "C:\Program Files\Python36\lib\encodings\__init__.py", line 31, in <module> 
ModuleNotFoundError: No module named 'codecs' 

Ich habe den gleichen Fehler auf beiden Architekturen. Die Setup-Datei sieht wie folgt aus:

#!/usr/bin/env python3 
from cx_Freeze import setup, Executable 

# Dependencies are automatically detected, but it might need fine tuning. 
build_exe_options = { 
    "packages": [ 
     "os", "io", "copy", "struct", "hashlib", "random", 
     "urllib", "pycurl", "json", "multiprocessing", 
     "cryptography", 
     "tornado", "watchdog", "pathtools" 
    ], 
    "includes": [ 
     "cryptography", "urllib.parse", 
    ], 
    "include_files": ["tmp", "server.ini", "client.ini"], 
    "excludes": ["tkinter"], 
} 

setup(
    name="BlindBackup", 
    version="1.0", 
    description="BlindBackup", 
    options={"build_exe": build_exe_options}, 
    executables=[ 
     Executable("backup.py", base=None), 
     Executable("bsync.py", base=None), 
     Executable("server.py", base=None), 
    ] 
) 

Mit anderen Worten, ich habe die „Codecs“ Paket explizit angegeben.

Was ist los?

AKTUALISIEREN Im Distributionsverzeichnis befindet sich eine Datei namens library.zip. Es enthält codecs.pyc, aber die EXE-Datei sieht es nicht. Wenn ich alle Dateien aus dem zip extrahieren, dann bekomme ich eine andere Fehlermeldung:

C:\Python\Projects\blindbackup\build\exe.win-amd64-3.6>backup.exe 
Traceback (most recent call last): 
    File "C:\Program Files\Python36\lib\site-packages\cx_Freeze\initscripts\__startup__.py", line 14, in run 
    module.run() 
    File "C:\Program Files\Python36\lib\site-packages\cx_Freeze\initscripts\Console.py", line 22, in run 
    importer = zipimport.zipimporter(os.path.dirname(os.__file__)) 
zipimport.ZipImportError: not a Zip file 

Ich denke, dass das Problem mit dem Code ist, die Module aus der library.zip-Datei zu importieren versucht? Aber ich bin mir nicht sicher, wie ich das beheben soll.

Antwort

0

war die Lösung dieses:

  • installieren cx_freeze 6, da Version 5 Python nicht unterstützt 3.6 (scheinbar)
  • pywin32 installieren (obwohl es nicht für mein Programm erforderlich war)
  • alle in fehlende Pyd-Dateien zu "includes" und alle fehlenden Pakete zu "packages" Abschnitt es das Setup-Skript.
+1

Ich habe festgestellt, dass jede Verwendung von cx_freeze einige spezielle massaging benötigt, um die exe erfolgreich ausgeführt zu bekommen. –

Verwandte Themen