Wie aus Python eine einfache exe erstellen (ohne GUI)

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.
nfb503
User
Beiträge: 19
Registriert: Donnerstag 5. Juni 2014, 14:26

Vielen Dank, das sieht wunderbar aus.

Die Logik verstehe ich nur nicht.
Zeile sys.frozen wird versucht auszuführen.
Wenn hier ein Fehler auftritt (AttributeError), ist das Sys eigentlich nicht frozen und __file__ kan benutzt werden

Die Technik dahinter verstehe ich nicht ganz und ich würde gerne das "dahinter" auch gerne begreifen
BlackJack

@nfb503: Der Import von `attrgetter` kann weg, das wird doch nirgends verwendet.
nfb503
User
Beiträge: 19
Registriert: Donnerstag 5. Juni 2014, 14:26

Ich dachte, ich brauche es, da ohne weder das If noch das Else ausgeführt wurde für diese Zeile:

getattr(sys, 'frozen',False):

Ich teste es nochmal genau, da mehrere Dinge von mir verändert wurden
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

nfb503 hat geschrieben:Die Logik verstehe ich nur nicht.
Zeile sys.frozen wird versucht auszuführen.
Wenn hier ein Fehler auftritt (AttributeError), ist das Sys eigentlich nicht frozen und __file__ kan benutzt werden
Das steht auch fast so im Code (vom "ausführen" mal abgesehen). Es wird ein Zugriff auf sys.frozen versucht. Existiert das nicht, so kommt es zu einem AttributeError und es wird __file__ verwendet um den Pfad zu bestimmen.

Ich verstehe jetzt das Verständnisproblem nicht.
nfb503
User
Beiträge: 19
Registriert: Donnerstag 5. Juni 2014, 14:26

Also ist .frozen eine Eigenschaft, die nur gesetzt wird, wenn es "eingefroren" ist, richtig?
Mich würde interessieren wie genau dies im Hintergrund abläuft, aber ich sehe erstmal in der Dokumentation nach (Module docs).
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

nfb503 hat geschrieben:Also ist .frozen eine Eigenschaft, die nur gesetzt wird, wenn es "eingefroren" ist, richtig?
Von dir kommt der Code doch. Du solltest schon verstehen was dein ``getattr(sys, 'frozen',False)`` macht ;-) Ich habe es einfach nur umformuliert.
Das Leben ist wie ein Tennisball.
nfb503
User
Beiträge: 19
Registriert: Donnerstag 5. Juni 2014, 14:26

Nein, von mir kommt der Code auch nicht :roll:

Aber das Umformulieren war toll, hier meine neue def, die auch funktioniert.
Im Prinzip muss ich in dem Fall wohl auch nicht mehr wissen, denn ich habe die Funktion getestet.

Code: Alles auswählen

import sys

def IsSysFrozen():

	try:
		sys.frozen
	except AttributeError:
		return False
	else:
		return True
BlackJack

@nfb503: In dem Fall ist die Ausnahmebehandlung übertrieben. Das kann man kürzer schreiben als (ungetestet):

Code: Alles auswählen

import sys
from functools import partial

def is_frozen():
    return hasattr(sys, 'frozen')

# oder 

is_frozen = partial(hasattr, sys, 'frozen')
Die Ausnahmebehandlung macht nur wirklich Sinn wenn man damit den zusätzlichen Test vermeidet.
Antworten