cx_Freezen

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
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

Hallo Leute, ich bin auf cx_Freezen umgestiegen. Der Grund ist, weil die py2exe nicht in der Lage ist, meiner *.EXE-Datei ein Icon zu verpassen. Dann probierte ich das andere Programm aus. Es klappt. Aber ein kleines Problem - im wahrsten Sinne des Wortes. Ich habe mit png2ico mehrere Icons zusammen getragen, also von 16x16 bis 512x512. Alle Icons haben die Farbtiefe von 256.

Meine derzeitge setup.py-Datei sieht wie folgt aus:

Code: Alles auswählen

# A simple setup script to create an executable using PyQt4. This also
# demonstrates the method for creating a Windows executable that does not have
# an associated console.
#
# PyQt4app.py is a very simple type of PyQt4 application
#
# Run the build process by running the command 'python setup.py build'
#
# If everything works well you should find a subdirectory in the build
# subdirectory that contains the files needed to run the application

import sys
from files.about.info import info_app
import sys
import os
from cx_Freeze import setup, Executable

PROG_info = info_app()

base = None
if sys.platform == "win32":
    base = "Win32GUI"

setup(
        name = PROG_info.dict_info["product_name"],
        version = PROG_info.dict_info["product_version"],
        description = PROG_info.dict_info["product_description"],
        author = PROG_info.dict_info["product_author"],
        executables = [Executable(script="xarphus.py",
                                  initScript=None,
                                  compress=True,
                                  copyDependentFiles=False,
                                  appendScriptToExe=False,
                                  appendScriptToLibrary = False,
                                  icon = "favicon.ico",
                                  targetName = PROG_info.dict_info["exe_name"] + ".exe",
                                  base=base)])
Und meine Batch-Date:

Code: Alles auswählen

rem *** Used to create a Python exe 

rem ***** get rid of all the old files in the build folder
rd /S /Q build

rem ***** create the exe
python setup.py build


rem **** pause so we can see the exit codes
pause "done...hit a key to exit"
Am Ende klappt alles. Exe-Datei ist vorhanden, funktioniert. Alles super. Und jetzt kommt der Knackpunkt. Wenn ich spaßeshalber die Ansicht auf "Extra groß" mache, bleiben meine Icons in der EXE-Datei klein. Obwohl in meiner favicon.ico die unterschiedlichen Größen vorhanden sind.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

'favicon.ico' gibt es in dem Ordner? Wie heißen deine anderen Auflösungen? Oder wo stecken die drin?
BlackJack

@Sr4l: Nach der Beschreibung vermute ich mal dass alle Grössen in der einen *.ico-Datei stecken.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@Sr4l: Die unterschiedlichen Größen sind in einer *.ico Datei verpackt, und zwar durch png2ico. Aber mal eine allgemeine Frage: Kann es sein, das cx_freezen eine ganz andere Philosophie verfolgt als py2exe? Mir ist aufgefallen, dass man bei py2exe nach dem Kompilieren die *.py-Module löschen kann, und nur die *.ui-Dateien erhalten bleiben müssen, damit die *.ex-Datei auch funktioniert. Alles super. Wenn ich mein Programm aber mit cx_Freezen kompiliere, dann braucht diese *.exe-Datei sogar die *.py-Module, ansonsten wirft die *.exe-Datei Fehlermeldungen, von wegen ""no module named blahblah". Damit die *.exe-Datei, die von cx_Freezen fehlerfrei läuft, braucht sie ALLE Dateien, was bei py2exe nicht der Fall ist. Komisch. Dahcte, darin liegt ja die Intention, dass man eine *.exe-Datei erzeugt, eben das man nicht mehr die ganzen *.py-Module mit ausliefern muss.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Sophus hat geschrieben:@Sr4l: Die unterschiedlichen Größen sind in einer *.ico Datei verpackt, und zwar durch png2ico.
Dann sollte es Funktionieren. Kannst du einer WIndows Verknüpfung mal dein ICON zuweisen und dann schauen ob bei der Verknüpfung die verschiedenen Größen funktionieren?


Zu deiner anderen Frage: Ich weiß jetzt nicht genau worauf du hinaus willst, aber: Es gibt verschiedene Arten "Verpackungsarten" für Python. Einmal zum Beispiel alles in eine .exe, die dann alle Python Dateien und auch Ressourcen enthält. Die wird dann einfach in einen TEMP Ordner entpackt und ist dann dort wie genau so wie das was du jetzt hast, eine EXE die nur Python startet und dein "Start Pythonscript" startet, welches dann noch von Python Import Dateien und den anderen Ressourcen wie Bilder abhängig ist.

Google mall nach "single executable". By PyInstaller heißt die Option z.B --onefile.

*edit* Achso noch was. cx_freeze kann das (glaub ich) nicht, also alles in eine ausführbare Datei stecken.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@Sr4l: Nach langem Probieren bin ich selbst drauf gekommen, wie das mit cx_Freeze geht. In vielen Anleitungen wird dir meist folgender Befehl vorgestellt:

Code: Alles auswählen

python setup.py build
Aber ich habe dann mit py2exe-Befehle kombiniert und folgendes probiert:

Code: Alles auswählen

python setup.py install
python setup.py build
Also erst install und dann build. Dann ist die *.Exe-Datei auch ohne die *.py-Module lauffähig.

Das mit deinem Vorschlag werde ich mal ausprobieren.

Edit: Die Symbole sind immer noch so klein.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Sr4l hat geschrieben:
Sophus hat geschrieben:@Sr4l: Die unterschiedlichen Größen sind in einer *.ico Datei verpackt, und zwar durch png2ico.
Kannst du einer Windows Verknüpfung mal dein ICON zuweisen und dann schauen ob bei der Verknüpfung die verschiedenen Größen funktionieren?
Geht das?

Zu setup.py install: Ich schätze das mit dem `setup.py install` geht jetzt nur auf deinem Rechner, nicht auf einem wo du nicht entwickelst (bzw nicht irgendwann mal, `setup.py install` gemacht hast). Mach mal eine Veränderung an deinem Programm, mach nur ein `setup.py build` lösch die Python Dateien und schau was passiert.
Benutzeravatar
Sophus
User
Beiträge: 1109
Registriert: Freitag 25. April 2014, 12:46
Wohnort: Osnabrück

@Sr4l: Ich denke

Code: Alles auswählen

python setup.py install
python setup.py build
klappt wohl deshalb, weil ich noch nebenbei py2exe auf meinem Rechner habe. Ich habe beide Programme drauf gelassen. Einfach weil ich noch Probieren will / möchte. Dann hatte ich offenbar Glück gehabt, dass ich beides kombinieren kann, und dadurch eine *.exe-Datei kreieren kann, ohne dass die *.exe-Datei am Ende nicht die *.py-Module braucht. :-)
Antworten