Probleme mit cxfreeze und Python 3.1

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.
heiliga horsd

Hallo liebe Python-Gemeinschaft.

Ich hoffe dies ist das richtige Forum Forum für mein Anliegen, falls nicht möge man das mir bitte entschuldigen.
Die Forensuche hat auch meiner Meinung nach nichts dienliches hervor gebracht.

Seit nunmehr etwas mehr als einem Monat programmiere ich mit Python (v. 3.1) ein kleines Mathe-Programm. Alles läuft einwandfrei und ich würde es auch gerne meinen Freunden zur Verfügung stellen, was anfangs noch mit cxfreeze gut funktionierte, nachdem das Programm aber immer umfangreicher (für euch ist das Programm sicherlich überschaubar, für mich stellt es bereits eine große Errungenschaft dar) wurde, gibt mir cxfreeze immer Fehlermeldungen aus, mit denen ich nix anfangen kann. Auch die neueste Version von cxfreeze hat keine Besserung gebracht.

Ich wollte daher Fragen, ob ihr mir Alternativen oder Lösungswege aufzeigen könnt, die mir ermöglichen einfache .exe-Dateien zu erstellen, denn für manche meiner Freunde ist das installieren von Python selbst keine Alternative (Internet zu langsam, keine entsprechenden Rechte auf dem PC etc.).


Danke schonmal für alle Antworten!

Lg heiliga horsd


P.S.: Mein Programm ist nur Python 3.1-kompatibel, 2.xx macht Probleme.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Hi,

1.) Du könntest uns die cx_freeze Fehlermeldungen zeigen, vielleicht kann hier einer etwas mehr damit anfangen und Lösungen posten.

2.) Du könntest anstelle cx_freeze auch Py2Exeoder PyInstallerverwenden.

Auch wenn ich bei Punkt 2) letztere Variante bevorzuge und für (für Windows) am einfachsten zu handhaben finde, gibt es immer mit zunehmenden 3rd Party Libraryzuwachs Probleme beim Paketieren von Python (o. auch anderen Interpretierten Sprachen + Interpreter) Sourcen in Binary-Form.

>>Masaru<<
heiliga horsd

Hallo Masaru,

erst einmal Danke für die Antwort. Natürlich bekommt ihr die Fehlermeldungen von cxfreeze wenn ihr sie wollt:
C:\Users\***\Desktop\Programm\Source>cxfreeze Programm.py
Traceback (most recent call last):
File "C:\Python31\Scripts\cxfreeze", line 5, in <module>
main()
File "C:\Python31\lib\site-packages\cx_Freeze\main.py", line 188, in main
freezer.Freeze()
File "C:\Python31\lib\site-packages\cx_Freeze\freezer.py", line 435, in Freeze

self._FreezeExecutable(executable)
File "C:\Python31\lib\site-packages\cx_Freeze\freezer.py", line 126, in _Freez
eExecutable
scriptModule = finder.IncludeFile(exe.script, exe.moduleName)
File "C:\Python31\lib\site-packages\cx_Freeze\finder.py", line 459, in Include
File
deferredImports)
File "C:\Python31\lib\site-packages\cx_Freeze\finder.py", line 310, in _LoadMo
dule
module.code = compile(codeString, path, "exec")
File "Programm.py", line 1
\ufeffimport time
^
SyntaxError: invalid character in identifier

C:\Users\***\Desktop\Programm\Source>
Mein Programm besitzt eine Datei, in der die ganzen Funktionen zur Berechnung sitzen, und ein Programm, welches das Menü etc. repräsentiert und die Funktionen korrekt aufruft.
Insgesamt sind folgende Module importiert:
decimal
time
os
locale

Das mit PyInstaller wäre (wenn es funktioniert) eine Möglichkeit, ich weiß leider nur nicht wirklich wie ich es installiere und anwende :oops:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

In deinem Script ist ganz am Anfang ein Byte-Order-Mark (\uEFFF), das musst du wohl entfernen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
heiliga horsd

Erstmal Danke für deine Antwort.
Leider hilft mir da von dir geschirebene in keinster Weise weiter... :(

Der Anfang der beiden Dateien sieht so aus:
import time
from ProgrammFunctions import *


while True: #Endlosschleife, damit das Programm immer wieder von vorne anläuft
[...]
from decimal import *
#Funktionssammlung Decimal importieren
import time #noetig für den Timestamp
import os #noetig um an das Homeverzeichnis zu gelangen
import locale
locale.setlocale(locale.LC_ALL,'')
Fehler1 = "Eingegebener Wert negativ, Abbruch" #Fehlermeldung bei negativen Werten
[...]
Wo befindet sich dieses Byte-Order-Mark? Und wie kommt es dahin?
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

Kannst Du mal Deine Programm.py Datei uns über http://paste.pocoo.org zeigen?

- einfach auf http://paste.pocoo.org gehen
- dort den Inhalt Deiner .py file ins Textfeld hineinkopieren
- links unten im DropDown Menu "Python" auswählen
- [Paste] Button klicken
- und uns die Url hier posten, die dann in der Adressleiste Deines Browsers angezeigt wird

>>Masaru<<
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

heiliga horsd hat geschrieben:Wo befindet sich dieses Byte-Order-Mark? Und wie kommt es dahin?
Es geht ganz vorne, in den ersten zwei Byte der Datei und wird von deinem Editor nicht angezeigt.

Und da hin kommt es, weil dein Editor es dort reingesetzt hat. Notepad tut sowas manchmal.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
heiliga horsd

@masaru:
http://paste.pocoo.org/show/166817/
Leonidas hat geschrieben:
heiliga horsd hat geschrieben:Wo befindet sich dieses Byte-Order-Mark? Und wie kommt es dahin?
Es geht ganz vorne, in den ersten zwei Byte der Datei und wird von deinem Editor nicht angezeigt.

Und da hin kommt es, weil dein Editor es dort reingesetzt hat. Notepad tut sowas manchmal.
Ich hab es eigentlich immer mit der IDLE von Python bearbeitet. Wie bekomme ich das jetzt wieder weg, weder Python IDLE, noch Editor zeigen es an!

edit:// Ich hab gegoogelt, Windows-Bordmittel helfen mir anscheinend nicht weiter, das Ubuntu will ich auch nicht extra starten. Ich zieh grad N++ und werde dann berichten, ob es funktioniert hat. Bis dahin schonmal Vielen Dank an alle, die mir geholfen haben!
heiliga horsd

Alles funktioniert Wunderbar, Vielen Vielen Dank!!!!
Ich hätte jetzt nur noch eine kleine Frage:
Bei der Ausführung sieht das ganze mit den Umlauten etwas ungewöhnlich aus (ü => ?, ä => " etc.), wenn ich das ganz normal mit Python ausführe passt alles. Was mache ich da falsch?
Benutzeravatar
mkesper
User
Beiträge: 919
Registriert: Montag 20. November 2006, 15:48
Wohnort: formerly known as mkallas
Kontaktdaten:

heiliga horsd hat geschrieben:Bei der Ausführung sieht das ganze mit den Umlauten etwas ungewöhnlich aus (ü => ?, ä => " etc.), wenn ich das ganz normal mit Python ausführe passt alles. Was mache ich da falsch?
Die Windows-Kommandozeile kennt leider nur die Codepages 850 bzw. 437. D.h. du müsstest deine Ausgabe entsprechend kodieren. Alles was nicht in der Codepage drin ist kann nicht dargestellt werden und würde dann einen UnicodeError liefern.
heiliga horsd

Ok erst einmal vielen Dank für deine Antwort!
Gibt es für mich irgendeine Möglichkeit, die Kodierung vor dem "freezen" ganz flott zu ändern, ohne wieder alles umschreiben zu müssen? Oder existiert da ein anderer Kniff?
Benutzeravatar
numerix
User
Beiträge: 2696
Registriert: Montag 11. Juni 2007, 15:09

Masaru hat geschrieben:2.) Du könntest anstelle cx_freeze auch Py2Exeoder PyInstallerverwenden.
Wenn ich nichts übersehen habe, dann sind beide - im Unterschied zu cxfreeze (das ich aber noch nie verwendet habe) - noch nicht fit für Python 3.
Benutzeravatar
Masaru
User
Beiträge: 425
Registriert: Mittwoch 4. August 2004, 22:17

numerix hat geschrieben:
Masaru hat geschrieben:2.) Du könntest anstelle cx_freeze auch Py2Exeoder PyInstallerverwenden.
Wenn ich nichts übersehen habe, dann sind beide - im Unterschied zu cxfreeze (das ich aber noch nie verwendet habe) - noch nicht fit für Python 3.
Ups ... hast recht ... Frechheit. *hut zieh*
heiliga horsd

Weiß denn keiner, wie ich dir Kodierung "quick'n dirty" ändern kann, so dass alles korrekt von der Windows-Shell dargestellt werden kann?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Also Quick'n'Dirty könnt ich mir vorstellen dass das überschrieben von ``sys.stdout`` zum gewünschten Ergebnis führen könnte. Aber ich habe eine ziemliche Abneigung gegen offensichtlich schlechte Lösungen, daher mag ich dich jetzt nicht auf dumme Ideen bringen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
heiliga horsd

Gibt's denn keine alternative zu "Alle Umlaute im Quelltext editieren"?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Die saubere Alternative wäre alle Strings vor der Ausgabe in das richtige Encoding zu wandeln und dieses optimalerweise durch den User festlegbar zu machen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
heiliga horsd

Und wie mache ich das? (also mit Kodieren und auswählen lassen)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

heiliga horsd hat geschrieben:Und wie mache ich das? (also mit Kodieren und auswählen lassen)
Also, sagen wir mal du hast foldenden Code:

Code: Alles auswählen

print u"Hallo Österreich"
dann wird der zu

Code: Alles auswählen

print u"Hallo Österreich".encode(user_encoding)
Und ``user_encoding`` muss dann entsprechend gesetzt werden. Das kann dann irgendeine Dropdown-Box in einer GUI sein, aber auch ein Kommandozeilenparameter oder was auch immer.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
heiliga horsd

Achso, also gar nicht so wild - hat das u eine bedeutung für mich?
Antworten