Probleme mit: pickle und py2exe

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
Gast99

Hallo,

ich habe ein kleines Programm mit Python mit pickle geschrieben. Wenn ich es jetzt aber mit py2exe in eine exe datei umwandle klappt es nicht mehr. Wenn ich die exe-Datei öffne startet er kurz aber dann schließt er wieder das Fenster!

Kann mir einer Helfen?

mfg
Gast99

Ich habs gerade nochma probiert.

Das Problem liegt irgentwie beim Laden von einer größeren Textdatei...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ja, klar. Ruf das Programm mal aus einer Konsole aus, so dass du die Fehlermeldung mitbekommst.

Ich bezweifle, dass das was mit pickle zu tun hat.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast99

Der Fehler:

Traceback (most recent call last):
File "TEST123.py", line 11, in ?
File "pickle.pyc", line 1394, in loads
File "pickle.pyc", line 872, in load
File "pickle.pyc", line 984, in load_string
ValueError: insecure string pickle


--------------------------------------------------

line 11 von TEST123.py:
...
daten = pickle.loads( f.read() )
...
tabellar
User
Beiträge: 186
Registriert: Mittwoch 4. September 2002, 15:28

Gast99 hat geschrieben:Der Fehler:

Traceback (most recent call last):
File "TEST123.py", line 11, in ?
File "pickle.pyc", line 1394, in loads
File "pickle.pyc", line 872, in load
File "pickle.pyc", line 984, in load_string
ValueError: insecure string pickle
...
Die Zeile 984 ist interessant und wichtig... :wink: ...

Tabellar
Gast99

tabellar hat geschrieben:
Gast99 hat geschrieben:Der Fehler:

Traceback (most recent call last):
File "TEST123.py", line 11, in ?
File "pickle.pyc", line 1394, in loads
File "pickle.pyc", line 872, in load
File "pickle.pyc", line 984, in load_string
ValueError: insecure string pickle
...
Die Zeile 984 ist interessant und wichtig... :wink: ...

Tabellar

Ja und was soll ich jetzt machen?!
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wie wärs mit pickle.load(f)?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast99

Leonidas hat geschrieben:Wie wärs mit pickle.load(f)?
Da kommt dieser Fehler:

Traceback (most recent call last):
File "TEST123.py", line 12, in ?
File "pickle.pyc", line 1390, in load
File "pickle.pyc", line 872, in load
File "pickle.pyc", line 985, in load_string
LookupError: no codec search functions registered: can't find encoding
querdenker
User
Beiträge: 424
Registriert: Montag 28. Juli 2003, 16:19
Wohnort: /dev/reality

Wie wäre es mit ein wenig mehr von deinem Programm-Code??
und eventuell auch mal deine setup.py?

Die Tracebacks kommen alle aus der pickle.pyc, aber die ruftst du ja auf in deiner test123.py, daher wäre es für uns schon hilfreich zu wissen, was du da machst.

mfg, querdenker
Gast99

setup.py:

Code: Alles auswählen

from distutils.core import setup
import py2exe
      
setup(console=["Test123.py"])
in Test123.py wird Datei Files.txt geladen.

Code: Alles auswählen

import pickle

f=file("files.txt",'r')
daten = pickle.load(f)
f.close()
Dann wird die geladene Liste bearbeitet. Das heißt Sachen hinzufügen ect.


Am Ende wird dann:

Code: Alles auswählen

f=file("files.txt",'w')
f.write(pickle.dumps(daten))
f.close()
Edit (Leonidas): Code in Python-Tags gesetzt, bitte das das nächste mal selbst machen :evil:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Versuchs mal damit:

Code: Alles auswählen

from distutils.core import setup
import py2exe

setup(console=["Test123.py"],
    options = {"py2exe": {"packages": ["encodings"]}}
)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast99

Leonidas hat geschrieben:Versuchs mal damit:

Code: Alles auswählen

from distutils.core import setup
import py2exe

setup(console=["Test123.py"],
    options = {"py2exe": {"packages": ["encodings"]}}
)
Wow! Du bist echt gut :)
Es klappt, zumindest auf den ersten Blick. Ich schaus mir jetzt nochn bisschen genauer an.

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

Gast99 hat geschrieben:Wow! Du bist echt gut :)
Danke 8)
Gast99 hat geschrieben:

Code: Alles auswählen

f=file("files.txt",'w')
f.write(pickle.dumps(daten))
f.close()
Ein Tipp noch: du kannst auch pickle.dump(data, f) nutzen um in die Datei zu schreiben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
BlackJack

Und pickle Dateien bitte immer im Binärmodus mit 'rb' bzw. 'wb' öffnen.
Gast009

BlackJack hat geschrieben:Und pickle Dateien bitte immer im Binärmodus mit 'rb' bzw. 'wb' öffnen.
Was meinst du damit?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Gast009 hat geschrieben:Was meinst du damit?
Statt

Code: Alles auswählen

f = file('files.txt', 'r')
besser

Code: Alles auswählen

f = file('files.txt', 'rb')
und statt

Code: Alles auswählen

f = file('files.txt', 'w')
besser

Code: Alles auswählen

f = file('files.txt', 'wb')
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
N317V
User
Beiträge: 504
Registriert: Freitag 8. April 2005, 13:23
Wohnort: München

BlackJack hat geschrieben:Und pickle Dateien bitte immer im Binärmodus mit 'rb' bzw. 'wb' öffnen.
Wieso denn?
Es gibt für alles eine rationale Erklärung.
Außerdem gibt es eine irrationale.

Wie man Fragen richtig stellt
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

N317V hat geschrieben:
BlackJack hat geschrieben:Und pickle Dateien bitte immer im Binärmodus mit 'rb' bzw. 'wb' öffnen.
Wieso denn?
Weil das auch im Protocoll 0 noch Binärdaten sind, deren Zeilenumbrüche sind immer so wie sie sind (ich weiß nicht ob es CRLF ist oder etwas anderes), wenn man die Zeilenumbrüche ändert funktionierts nicht mehr. Zumindest habe ich das mal irgendwo gelesen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
gAst005

Leonidas hat geschrieben:
Gast009 hat geschrieben:Was meinst du damit?
Statt

Code: Alles auswählen

f = file('files.txt', 'r')
besser

Code: Alles auswählen

f = file('files.txt', 'rb')
und statt

Code: Alles auswählen

f = file('files.txt', 'w')
besser

Code: Alles auswählen

f = file('files.txt', 'wb')
Wenn ich das aber so mache, dann meckert er bei der nächsten zeile "daten2 = pickle.loads( f.read() )" rum.

Mein Codeabschnitt:

Code: Alles auswählen

f=file("files2.txt",'rb')
daten2 = pickle.loads( f.read() )
f.close()
Folgender Fehler zeigt er an:
Traceback (most recent call last):
File "C:\xxy.py", line 43, in -toplevel-
daten2 = pickle.loads( f.read() )
File "C:\Python24\lib\pickle.py", line 1394, in loads
return Unpickler(file).load()
File "C:\Python24\lib\pickle.py", line 872, in load
dispatch[key](self)
File "C:\Python24\lib\pickle.py", line 980, in load_string
raise ValueError, "insecure string pickle"
ValueError: insecure string pickle
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

gAst005 hat geschrieben:Mein Codeabschnitt:

Code: Alles auswählen

f=file("files2.txt",'rb')
daten2 = pickle.loads( f.read() )
f.close()
Dafür hat pickle ja auch die load()-Funktion (ohne das s hintendran, welches auf String weist):

Code: Alles auswählen

f = file("files2.txt",'rb')
daten2 = pickle.load(f)
f.close()
(habe ich allerdings nicht getestet, nur schnell meine Erinnerung mit der Modul-Dokumentation verglichen)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten