pyinstaller und reproduzierbarkeit von exe files

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
momo_1212
User
Beiträge: 12
Registriert: Mittwoch 2. August 2023, 23:56

Hi
ich generiere mit Pyinstaller ein Exe file in windows.
Mein projekt hat immer mehr User.
Jetzt wollte ich meine Projekt etwas sicherer gestalten. Ich habe pyinstaller auf den selben Code auf 2 Rechner laufen lassen und habe festgestellt, dass der EXE file was raus kommt nicht jedes mal gleich ist. Das heisst ein binary comparison der 2 EXE files zeigt unterschiede.
Das ist doch ganz schon gefährlich. Oder?
Gibt es da ein Trick?
Benutzeravatar
sparrow
User
Beiträge: 4626
Registriert: Freitag 17. April 2009, 10:28

Kannst du kurz erklären, wie genau Pyinstaller funktioniert? Also nicht, dass es eine .exe macht, sondern wie es dafür vorgeht?
Benutzeravatar
__blackjack__
User
Beiträge: 14276
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

@momo_1212: Per se ist das nicht gefährlich. Man kann halt nicht so einfach nachvollziehen ob eine EXE aus einem gegebenen Satz an Eingabedaten erstellt wurde.
“Programming is partially an artform and, like artists, programmers will do it even if they don't get money.” — Linus Torvalds
Benutzeravatar
noisefloor
User
Beiträge: 4284
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

das fehlt noch Kontext... ist die Python-Version auf beiden Rechner _exakt_ gleich und aus der gleichen Stelle installiert? Hat pyinstaller _exakt_ die gleiche Version? AFAIK fließt in pyinstaller ja alles mögliche ein, weil das am Ende ein selbstextrahierendes Archiv ist. Keine Ahnung, OS-seitig noch was rein fließt und die Build Version von Windows auch noch da mit rein spielt.

Unabhängig davon sehe ich auch nicht, was daran "gefährlich" sein soll. Potentiell gefährlich sind nur zwei Sachen: dein Code und was pyinstaller noch in die EXE packt. Auf ersteres hast du vollen Einfluss, auf letzteres nicht.

BTW: exakt den gleiche Thread gibt es bei python-forum.io: https://python-forum.io/thread-46136.html. Scheinbar ist das Vertrauen in die Qualität der Antworten in den einem oder anderen Forum nicht hoch genug, deswegen "Gürtel + Hosenträger"`?

Gruß, noisefloor
Benutzeravatar
__blackjack__
User
Beiträge: 14276
Registriert: Samstag 2. Juni 2018, 10:21
Wohnort: 127.0.0.1
Kontaktdaten:

Wegen Archiv: Nicht nur die Dateiinhalte müssen gleich sein, sondern auch die Metadaten wie die Zeitstempel müssen gleich sein. Das stellt sich dann eventuell auch die Frage ob auf beiden Rechnern das gleiche OS verwendet wird, beziehungsweise Dateisysteme, denn nicht alle haben die gleiche Auflösung was beispielsweise Zeitstempel angeht.
“Programming is partially an artform and, like artists, programmers will do it even if they don't get money.” — Linus Torvalds
Benutzeravatar
DeaD_EyE
User
Beiträge: 1313
Registriert: Sonntag 19. September 2010, 13:45
Wohnort: Hagen
Kontaktdaten:

Ich hab mich schon gewundert. Habe meinen Beitrag gesucht und dann ist mir aufgefallen, dass ich das im anderen Forum gepostet habe.

Reproduzierbarkeit ist nicht einfach zu erreichen, da es vom Compiler, vom Host, von eingesetzten Bibliotheken, (und noch mehr) abhängt.
Es kann z.B. passieren, dass zwei softwaremäßig identische Hosts Unterschiede beim Kompilieren erzeugen.

Jedenfalls bietet Pyinstaller diese Option, aber das bedeutet nicht, dass zwei unterschiedliche Hosts mit Pyinstaller die gleiche Exe erzeugen.





Ich hoffe, dass sich Windows in den nächsten 10 Jahren von selbst erledigt. Neuster Scheiß: Man muss sich bei Windows 11 mit seinem Account anmelden, um Notepad nutzen zu können.
Microsoft arbeitet hart daran, Privatkunden zu verlieren und das Witzige ist, dass sich MS auch nicht auf die Privatkunden konzentriert und jetzt laufen die Unternehmen weg.

PS: Pyinstallier kompiliert nichts, packt aber eine kompilierte Python-Version mit dem Code. Kannst ja mal testen, ob auf zwei Unterschiedlichen Hosts die gleiche EXE erzeugt wird, wenn du die gleiche Python-Version für Pyinstaller verwendest. Musst natürlich diesen SEED-Trick machen, damit der Pseudo-Zufallsgenerator einen definierten Anfangswert hat, der immer gleich ist. Aufrufe von random enden dann immer in der gleichen Sequenz == reproduzierbar.

Beim Spiel Doom wollte man, dass Zufälle immer gleich sind. Anstatt einen Seed-Wert zu setzen, nutzt das Spiel eine Tabelle mit int, um einen Pseudo-Zufallsgenerator zu implementieren. Es sieht zufällig aus, aber wenn man eine Demo abspielt, sind die "Zufälle" immer gleich. D.h. es ist deterministisch und reproduzierbar.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Antworten