Problema:
No puedo distribuir un .exe generado por cx_freeze a otra máquina, porque parece que el exe contiene referencias a rutas absolutas en la máquina que generó el .exe. También tuve que incluir vcruntime140.dll directamente, porque no copié "include_msvcr": True
el archivo.
Preparar
- Gana 10
- Python 3.7.2
- cx_freeze 6.0
- NO virtualenv (aunque no parece importar, lo he intentado con venv)
Preguntas similares
Esta pregunta se ha hecho anteriormente de forma similar, pero no tiene una respuesta: ruta de copias cx_Freeze
Registro de errores
Al iniciar el script, aparecen los siguientes errores (no puedo copiar / pegar desde la ventana, así que comparto una imagen). Puede ver las referencias a una ruta absoluta C:\Program Files (x86)\Python....
que obviamente no está presente en otra máquina.
congelar script
from os.path import dirname
from cx_Freeze import setup, Executable
from config import settings
import os.path
import sys
import glob
PYTHON_INSTALL_DIR = os.path.dirname(os.path.dirname(os.__file__))
DEPENDENCY_DIR = os.path.join(os.getcwd(), 'dependencies')
os.environ['TCL_LIBRARY'] = os.path.join(DEPENDENCY_DIR, 'tcl', 'tcl8.6')
os.environ['TK_LIBRARY'] = os.path.join(DEPENDENCY_DIR, 'tcl', 'tk8.6')
packages = ["sepa", "datev", "atexit", "shiboken2", "PySide2"]
includes = []
excludes = ["Pyside2.Qt5WebEngineCore.dll"]
includefiles = ['qt', 'settings', 'config', os.path.join(DEPENDENCY_DIR, 'DLLs', 'tk86t.dll'),
os.path.join(DEPENDENCY_DIR, 'DLLs', 'tcl86t.dll'), os.path.join(DEPENDENCY_DIR, 'DLLs', 'vcruntime140.dll')]
# Dependencies are automatically detected, but it might need fine tuning.
build_exe_options = {"packages": packages,
"excludes": excludes,
"includes": includes,
"include_files": includefiles,
"optimize": 2,
"include_msvcr": True}
# GUI applications require a different base on Windows (the default is for a
# console application).
base = None
if sys.platform == "win32":
base = "Win32GUI"
setup(name="sepa_converter",
version=settings.version,
description="Programm zum Konvertiern von SEPA Dateien zum importieren in Buchhaltungsprogramme",
options={"build_exe": build_exe_options},
executables=[Executable("export_gui.py", base=base)])
#Debug DLLs von Pyside2 löschen
tmp = glob.glob("build/*/Pyside2/*d.dll")
for i in tmp:
os.remove(i)
tmp = glob.glob("build/*/Pyside2/*/*/*d.dll")
for i in tmp:
os.remove(i)
filelist = ['Qt5WebEngineCore.dll', 'icudt54.dll', 'opengl32sw.dll', 'Qt5Designer.dll', 'd3dcompiler_47.dll', 'Qt5Quick.dll']
for f in filelist:
for i in glob.glob("build/*/Pyside2/%s" % f):
os.remove(i)
python
python-3.x
cx-freeze
Harper
fuente
fuente
Respuestas:
La degradación a cx_freeze 5.1.1 resolvió el problema por mí.
fuente
Pasos para que funcione:
fuente