pyinstaller, cx_freeze unicode???

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.
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

pyinstaller, cx_freeze unicode???

Beitragvon DatenMetzgerX » Samstag 24. Juni 2006, 20:07

Hallo
Wenn ich mein Programm auf Linux laufen lasse (ohne zu freezen), geht alles wunderbar.

Sobald ich es aber mit einen der oben gennanten Programmen freeze, gibt es Probleme. Und zwar reklamiert er wegen Umlauten

Code: Alles auswählen

        for root, dir, files in os.walk(self.Folder):
            for file in files:
                if resize.isPicture(os.path.splitext(file)[-1], wildcard):
                    lCounter+=1L


Auf der ersten Zeile soll der Fehler liegen :o
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Samstag 24. Juni 2006, 20:33

Hi DatenMetzgerX!

Nur mal so zum Ausprobieren. Hilft es, wenn du diesen Code ganz oben rein gibst?

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import sys
import codecs

# Encodings herausfinden
out_enc = sys.stdout.encoding or sys.getfilesystemencoding()
err_enc = sys.stderr.encoding or sys.getfilesystemencoding()
try:
    in_enc = sys.stdin.encoding
except:
    in_enc = sys.getfilesystemencoding()

# StdOut und StdErr umleiten -> Streamwriter mit korrektem Encoding
# (!!!funktioniert so nicht im IDLE!!!)
sys.stdout = codecs.getwriter(out_enc)(sys.__stdout__)
sys.stderr = codecs.getwriter(out_enc)(sys.__stderr__)

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Samstag 24. Juni 2006, 21:55

Das ist doch für eine Kommandozeilen Programm?

Ist aber ein wxPython Programm
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 25. Juni 2006, 07:59

DatenMetzgerX hat geschrieben:Das ist doch für eine Kommandozeilen Programm?

Probier es bitte trotzdem aus. Es leitet ja auch STDIN um. Mein Gedanke war: Vielleicht beeinflusst es indirekt "os.walk"? Der Zweite Gedanke: Vielleicht genügt es ja schon, wenn das Modul "codecs" importiert wird.

PS: Traceback bitte.
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Sonntag 25. Juni 2006, 09:47

Nach dem einfügen der oben gennanten Zeilen

Code: Alles auswählen

micha@micha-desktop:~/pyinstaller$ /home/micha/pyinstaller/main/distmain/main
Traceback (most recent call last):
  File "<string>", line 23, in ?
  File "./main/buildmain/out1.pyz/codecs", line 752, in getwriter
TypeError: lookup() argument 1 must be string, not None


Vorher

Code: Alles auswählen

Exception in thread Thread-1:
Traceback (most recent call last):
  File "./main/buildmain/out1.pyz/threading", line 442, in __bootstrap
  File "./main/buildmain/out1.pyz/frmfolder", line 32, in run
  File "./main/buildmain/out1.pyz/os", line 291, in walk
  File "./main/buildmain/out1.pyz/os", line 291, in walk
  File "./main/buildmain/out1.pyz/os", line 281, in walk
  File "./main/buildmain/out1.pyz/posixpath", line 65, in join
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Sonntag 25. Juni 2006, 10:01

Hallo Micha,

so wie ich das sehe, hat sich dein Problem mit Umlauten, mit dem Code von Gerold gelöst, allerdings hast du einen Fehler in deinem Programm. Du musst der Funktion lookup einen String als erstes Argument übergeben. Du hast einen anderen Typ übergeben(None).
mfg

Thomas :-)
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Sonntag 25. Juni 2006, 10:10

Habe das Ganze 1:1 kopiert...

Wenn ich es in Python laufen lasse, funktioniert alles.
Sobald ich es mit pyinstaller Freeze, läuft wieder nichts mehr (Traceback oben)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 25. Juni 2006, 11:01

DatenMetzgerX hat geschrieben:Sobald ich es mit pyinstaller Freeze, läuft wieder nichts mehr

Hi DatenMetzgerX!

Ich habe ein wenig experimentiert. Probiere mal diesen Code aus:

Code: Alles auswählen

#!/usr/bin/env python
# -*- coding: iso-8859-1 -*-

import sys
import encodings
import encodings.ascii
import encodings.utf_8
import encodings.iso8859_1
import encodings.iso8859_15
import encodings.mbcs
import encodings.cp850
import codecs

 
# Encodings herausfinden
out_enc = sys.stdout.encoding or sys.getfilesystemencoding()
print out_enc
err_enc = sys.stderr.encoding or sys.getfilesystemencoding()
print err_enc

try:
    in_enc = sys.stdin.encoding
except:
    in_enc = sys.getfilesystemencoding()

# StdOut und StdErr umleiten -> Streamwriter mit korrektem Encoding
# (!!!funktioniert so nicht im IDLE!!!)
sys.stdout = codecs.getwriter(out_enc)(sys.__stdout__)
sys.stderr = codecs.getwriter(out_enc)(sys.__stderr__)

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 25. Juni 2006, 11:10

...oder auch so:

Code: Alles auswählen

import encodings.cp037, encodings.cp1006, encodings.cp1026, encodings.cp1140, \
       encodings.cp1250, encodings.cp1251, encodings.cp1252, encodings.cp1253, \
       encodings.cp1254, encodings.cp1255, encodings.cp1256, encodings.cp1257, \
       encodings.cp1258, encodings.cp424, encodings.cp437, encodings.cp500, \
       encodings.cp737, encodings.cp775, encodings.cp850, \
       encodings.cp852, encodings.cp855, encodings.cp856, \
       encodings.cp857, encodings.cp860, encodings.cp861, \
       encodings.cp862, encodings.cp863, encodings.cp864, \
       encodings.cp865, encodings.cp866, encodings.cp869, \
       encodings.cp874, encodings.cp875, encodings.idna, \
       encodings.iso8859_10, encodings.iso8859_13, encodings.iso8859_14, \
       encodings.iso8859_15, encodings.iso8859_1, encodings.iso8859_2, \
       encodings.iso8859_3, encodings.iso8859_4, encodings.iso8859_5, \
       encodings.iso8859_6, encodings.iso8859_7, encodings.iso8859_8, \
       encodings.iso8859_9, encodings.koi8_r, encodings.koi8_u, \
       encodings.latin_1, encodings.mac_cyrillic, encodings.mac_greek, \
       encodings.mac_iceland, encodings.mac_latin2, encodings.mac_roman, \
       encodings.mac_turkish, encodings.mbcs, encodings.palmos, \
       encodings.punycode, encodings.quopri_codec, encodings.utf_8

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Sonntag 25. Juni 2006, 11:11

gerold hat geschrieben:...oder auch so:

Code: Alles auswählen

import encodings.cp037, encodings.cp1006, encodings.cp1026, encodings.cp1140, \
       encodings.cp1250, encodings.cp1251, encodings.cp1252, encodings.cp1253, \
       encodings.cp1254, encodings.cp1255, encodings.cp1256, encodings.cp1257, \
       encodings.cp1258, encodings.cp424, encodings.cp437, encodings.cp500, \
       encodings.cp737, encodings.cp775, encodings.cp850, \
       encodings.cp852, encodings.cp855, encodings.cp856, \
       encodings.cp857, encodings.cp860, encodings.cp861, \
       encodings.cp862, encodings.cp863, encodings.cp864, \
       encodings.cp865, encodings.cp866, encodings.cp869, \
       encodings.cp874, encodings.cp875, encodings.idna, \
       encodings.iso8859_10, encodings.iso8859_13, encodings.iso8859_14, \
       encodings.iso8859_15, encodings.iso8859_1, encodings.iso8859_2, \
       encodings.iso8859_3, encodings.iso8859_4, encodings.iso8859_5, \
       encodings.iso8859_6, encodings.iso8859_7, encodings.iso8859_8, \
       encodings.iso8859_9, encodings.koi8_r, encodings.koi8_u, \
       encodings.latin_1, encodings.mac_cyrillic, encodings.mac_greek, \
       encodings.mac_iceland, encodings.mac_latin2, encodings.mac_roman, \
       encodings.mac_turkish, encodings.mbcs, encodings.palmos, \
       encodings.punycode, encodings.quopri_codec, encodings.utf_8

lg
Gerold
:-)


Das sieht aber nicht mehr wirklich schön aus. :shock:
mfg



Thomas :-)
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 25. Juni 2006, 11:16

Python Master 47 hat geschrieben:Das sieht aber nicht mehr wirklich schön aus. :shock:

Funktioniert es???

Es geht ja nur darum, dass die benötigten Encodings evt. importiert werden müssen, bevor sie in cxFreeze und/oder py2exe verwendet werden können.

Wenn es funktioniert, dann wissen wir woran wir sind. Du kannst dann ja immer noch auf die notwendigsten Encodings abspecken.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Python 47
User
Beiträge: 574
Registriert: Samstag 17. September 2005, 21:04

Beitragvon Python 47 » Sonntag 25. Juni 2006, 11:29

Hi Gerold,

ich wollt ja nur damit sagen, das ich dein 1. Beispiel nehmen würde. Denn in einem Programmcode würde es um einiges besser aussehen als das 2. Beispiel. Aber im Grunde hast du recht.
mfg



Thomas :-)
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Sonntag 25. Juni 2006, 12:10

Funktioniert beides nicht.

Das ganze versuche ich auf Ubuntu mit pyinstaller.

Wenn ich das ganze mit py2exe freeze, läuft es nachher bestens (nicht auf linux)

Code: Alles auswählen

Exception in thread Thread-1:
Traceback (most recent call last):
  File "./main/buildmain/out1.pyz/threading", line 442, in __bootstrap
  File "./main/buildmain/out1.pyz/frmfolder", line 50, in run
  File "./main/buildmain/out1.pyz/os", line 291, in walk
  File "./main/buildmain/out1.pyz/os", line 291, in walk
  File "./main/buildmain/out1.pyz/os", line 281, in walk
  File "./main/buildmain/out1.pyz/posixpath", line 65, in join
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 4: ordinal not in range(128)


Line 50 immer noch die gleiche wie am anfang
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Sonntag 25. Juni 2006, 12:33

DatenMetzgerX hat geschrieben:Wenn ich das ganze mit py2exe freeze, läuft es nachher bestens (nicht auf linux)

Hi DatenMetzgerX!

Ich habe meine Tests nur mit cx_freeze und nur mit dem Code aus diesem Beitrag http://www.python-forum.de/post-39112.html#39112 durchgeführt. cx_freeze hat sich einiges von py2exe und pyinstaller abgeschaut. Vielleicht läuft es mit cx_freeze unter Windows und Linux korrekt.

lg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs

Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Beitragvon DatenMetzgerX » Sonntag 25. Juni 2006, 13:36

hmm geht nicht.

Genau den Code von oben genomme. Gefreezt

Code: Alles auswählen

micha@micha-desktop:~/Desktop/cx_Freeze-3.0.2/image$ python ../FreezePython.py "../../test.py"


und dann ausgeführt, selber Fehler wie vorher

Code: Alles auswählen

micha@micha-desktop:~/Desktop/cx_Freeze-3.0.2/image$ ./test
None
None
Traceback (most recent call last):
  File "/home/micha/Desktop/cx_Freeze-3.0.2/initscripts/Console.py", line 26, in ?
    exec code in m.__dict__
  File "../../test.py", line 24, in ?
    sys.stdout = codecs.getwriter(out_enc)(sys.__stdout__)
  File "/usr/lib/python2.4/codecs.py", line 752, in getwriter
    return lookup(encoding)[3]
TypeError: lookup() argument 1 must be string, not None


Code: Alles auswählen

import sys
import encodings
import encodings.ascii
import encodings.utf_8
import encodings.iso8859_1
import encodings.iso8859_15
import encodings.latin_1
import encodings.cp850
import codecs

# Encodings herausfinden
out_enc = sys.stdout.encoding or sys.getfilesystemencoding()
print out_enc
err_enc = sys.stderr.encoding or sys.getfilesystemencoding()
print err_enc

try:
    in_enc = sys.stdin.encoding
except:
    in_enc = sys.getfilesystemencoding()

# StdOut und StdErr umleiten -> Streamwriter mit korrektem Encoding
# (!!!funktioniert so nicht im IDLE!!!)
sys.stdout = codecs.getwriter(out_enc)(sys.__stdout__)
sys.stderr = codecs.getwriter(out_enc)(sys.__stderr__)

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]