Verständnisproblem .pyc .pyo

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
Gerhard.S
User
Beiträge: 23
Registriert: Donnerstag 26. Juni 2014, 17:12

Hallo, erstmal hallo an alle - ich bin der neue

Ich habe ein Problem mit .pyc und .pyo in der Addon Programmierung für XBMC (Python 2.6)
wenn ich mit import auf meinem WindowsPC eine Datei importiere bekomme ich eine .pyo Datei geliefert dann kann ich auch meine .py löschen und alles ist gut
das selbe auf meinem Android TVStick, nur da bekomme ich eine .pyc Datei geliefert

warum funktioniert z.B. die erzeugte pyo von Windows auf dem Android Stick nicht und umgekehrt funktioniert die .pyc auf dem WinPC nicht?
wenn ich z.B ein Programm codiert habe (pyc/pyo) kann ich es nicht an andere Leute ausliefern weil nicht sicher ist das es auch funktioniert,
es soll zumindest ein kleiner Leseschutz vorhanden sein, denn sicher ist sowieso nichts.

gruß Gerhard
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Python ist eine Scriptsprachen. Scriptsprachen zeichnen sich idR dadurch aus, dass sie nicht kompiliert sonder interpretiert werden.

Python ist da etwas speziell, weil es Bytcode für den Interpreter erstellen kann: .pyo sind optimierte Dateien für den Python-Interpreter, .pyc-Dateien unoptimierte Dateien.
Die Dateien sind aber nicht einfach zwischen Versionen / Plattformen austauschbar, sondern werden im Bedarfsfall aus dem Quellcode neu erstellt.

Ich frage mich nur warum du deinen Code verstecken möchtest. Ist er so gruselig?
Gerhard.S
User
Beiträge: 23
Registriert: Donnerstag 26. Juni 2014, 17:12

gruselig bin ich vielleicht, aber nicht mein Code,
das habe ich mir bei PureBasic angewöhnt da mein letztes Programm ca. 5000 CodeZeilen hatte

es soll versteckt werden das nicht alle meine internen Links nachvollziehen können
und außerdem möchte ich nicht zig Kopien von meinem Addon finden (wer möchte das schon)

und wie kann ich sowas lösen, als letzte Möglichkeit würde ich nach dem Start die orig. .py automatisch löschen
wird die pyc eigentlich vor oder während dem ausführen erstellt

gruß Gerhard


Deutschland führt übrigens grade 1:0
BlackJack

@sparrow: Python ist genau dann eine Skriptsprache wenn man sie zum skripten benutzt. Ansonsten ist es keine Skriptsprache.
Sirius3
User
Beiträge: 18271
Registriert: Sonntag 21. Oktober 2012, 17:20

@Gerhard.S: irgendwas in einem Programm, das man verteilt, verstecken zu wollen, ist Quatsch. Das zeigt die Content-Industrie in regelmäßigen Abständen immer wieder. Die Frage ist ja nur, wieviel Interesse hat irgendwer daran. Zugangsdaten zu irgendwelchen Diensten im Internet sollten nie verteilt werden, egal ob mit oder ohne Quelltext. Und der Quelltext an sich dürfte, ohne Dir Nahe treten zu wollen, für die meisten völlig uninteressant sein.
Seh's als Kompliment an, wenn Du zig Kopien von Deinem Addon findest. Wenn Du damit Geld verdienen musst, mach das deutlich, dass zwar jeder Dein Addon kopieren darf, Du aber für die Weiterentwicklung eine Gegenleistung brauchst. Ist auf jeden Fall besser, als Zeit und Mühe in Verschleierung zu stecken, die im Ernstfall sowieso nichts bringt.
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Gerhard.S hat geschrieben:es soll versteckt werden das nicht alle meine internen Links nachvollziehen können
und außerdem möchte ich nicht zig Kopien von meinem Addon finden (wer möchte das schon)
Wenn es Dir nur um "Sichtschutz" geht, liefere Dein Programm doch als Binary aus. Dafür gibt es diverse Tools, welche zumindest dem ersten unbedarften Blick die Tatsache verschleiern, dass es sich um Python handelt. Die Binaries musst Du dann allerdings für jede Zielplattform getrennt vorhalten. Hierbei kommt von mir aber gleich die Lizenz-Warnung mit - falls Du Drittmodule einbindest, welche GPL-ähnlich lizensiert sind, bist Du gezwungen, lesbaren Quelltext auszuliefern und allen Lizenznehmern die Abänderbarkeit einzuräumen.
Alles was darüber hinausgehen soll (z.B. Lizenzschlüsselprüfung bis hin zur Onlineaktivierung) ist mit Python und eigentlich jeder anderen Sprache nicht sinnvoll. Die kompilierenden Sprachen setzen hier nur den Aufwand zur Aushebelung höher. Ist das Interesse groß genug, wird gehebelt ;)
Das wäre nur noch mit Endgeräte-Verschlüsselung/Signatur zu verhindern, was sich "Gott sei Dank" noch nicht durchgesetzt hat.
BlackJack

@Gerhard.S: Wie soll denn das Umwandlen in Bytecode-Dateien das kopieren verhindern? Und wenn jemand Links sehen möchte, lädt er sich die Datei halt mal in einen Hexeditor.
Gerhard.S
User
Beiträge: 23
Registriert: Donnerstag 26. Juni 2014, 17:12

Danke erstmal für die vorläufigen Tips, hat aber vorerst nicht weitergeholfen
mit den Lizensrechten kenne ich mich aus und verwende auch keine Drittmodule und wenn sind die uncodiert

die eigentliche Frage warum auf Android pyc und auf Win7 pyo
und wenn ein Quelltext codiert wird sollte er doch identisch sein und von anderen Systemen gelesen werden können
oder werden in der Codierung noch System Infos verpackt und zu welchem Zweck

deswegen heißt es im Titel auch Verständnisproblem

@ Blackjack
kopieren ist doch OK, ohne Anmeldung auf meinem Server geht sowieso nichts und Links kann man toll splitten und in einer späteren Routine zusammenbasteln
da findest du im Hexeditor auch keinen kompletten Link mehr und ein "Profi" knackts sowieso,
ich habe mal in eine PureBasic-1000-Zeilen exe einen Code versteckt zum testen, ein 14 jähriger Schweizer hatte es in 10min herausgefunden
das war auch nie die Frage
Zuletzt geändert von Gerhard.S am Freitag 27. Juni 2014, 11:48, insgesamt 1-mal geändert.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Gerhard.S hat geschrieben:mit den Lizensrechten kenne ich mich aus und verwende auch keine Drittmodule und wenn sind die uncodiert
Das ist nicht der Punkt. Wenn du GPL-Module benutz, dann musst du den Nutzern *deinen* Code zur Verfügung stellen, nicht den Code der Module.
Gerhard.S hat geschrieben:die eigentliche Frage warum auf Android pyc und auf Win7 pyo
Das wurde doch schon genannt. pyc-Dateien sind in Bytecode compiliert und nicht optimiert. pyo-Dateien sind zu Bytecode compiliert und zusätzlich optimiert. Welche der Versionen erstellt wird, das hängt vom Interpreter und dessen Startoptionen ab. Siehe hier.
Gerhard.S hat geschrieben:und wenn ein Quelltext codiert wird sollte er doch identisch sein und von anderen Systemen gelesen werden können
Nein.
Das Leben ist wie ein Tennisball.
BlackJack

@Gerhard.S: Der Quelltext wird nicht ”kodiert” sondern compiliert damit er von der Python VM für die er kompiliert wurde, ausgeführt werden kann. Das ist so ein bisschen als wenn Du fragen würdest warum ein C-Programm vom Compiler für Android und Win7 nicht zur bitweise identischen Kopie übersetzt wird und warum man die Windows-EXE dann nicht auf dem Android-Gerät laufen lassen kann. Die Python-VM von CPython und die Bytecodes sind ein Implementierungsdetail für das keine Garantien gegeben werden, ausser das die genau mit der CPython-Version laufen, mit der sie erstellt wurden. Alles andere ist Zufall auf den man sich nicht verlassen darf. Die Dateien sind als Cache für kompilierten Bytecode gedacht und nicht zur weitergabe von Programmen.

Warum bei Deinem Windows anscheinend per Default ``.pyo``-Dateien erzeugt werden kann ich Dir nicht sagen. Da muss irgendwo eingestellt sein, dass Python mit dem Optimierungsschalter läuft. Wobei ich den noch nie benutzt habe, denn das bringt nicht wirklich etwas ausser etwas kleinere Dateien, was bei heutigen Speichermediengrössen ein Witz ist. Wenn ich irgendwo ein ``assert`` verwende was tatsächlich zu viel Rechnenleistung verbraucht, nehme ich das lieber heraus und schreibe einen erschöpfenden Unit-Test für den Fall.

Wenn das splitten des Links nicht auf natürliche Weise im Programm entsteht, sondern erst nachträglich und nur um ihn schwerer auffindbar zu machen, dann handelt man sich für vermeintliche Sicherheit nur eine zusätzliche Fehlerquelle ein. Das lohnt nicht. Irgendwo muss der Link ja zusammengesetzt verwendet werden. An der Stelle lauscht man halt einfach mit. Da hilft kein Zerstückeln um Code gegen.
Gerhard.S
User
Beiträge: 23
Registriert: Donnerstag 26. Juni 2014, 17:12

Jo, jetzt weiß ich warums nicht geht,
erst dachte ich da Python Plattformübergreifend funktioniert, sollte es mit den pyc / pyo Files auch sein
grob gesagt: ich dachte es wäre nur ein "zusammengepacktes/gekürztes Ergebnis" des Quellcodes

das mit den zerstückelten Links war nur ein Beispiel für die Unsichtbarkeit im Hexeditor,
wobei bei mir die Links gestückelt sind und je nach Anmeldung zusammengesetzt werden

ist klar das ich jeden Link mitschneiden kann, kann sogar auch meine Fritzbox (http://FritzIP/html/capture.html)

danke für den Durchblick den ich jetzt habe :idea: und denke das Thema kann als gelöst bezeichnet werden

Gruß und Danke Gerhard

@BlackJack wie kann das Thema als gelöst im Titel geändert werden, finde ich immer gut in anderen Foren
Sirius3
User
Beiträge: 18271
Registriert: Sonntag 21. Oktober 2012, 17:20

@Gerhard.S: wie schon geschrieben, .pyo und .pyc-Dateien sind vom Format her das selbe, je nach Python-Version können sie aber anders aufgebaut sein; der Aufwand für jede Python-Version eine eigene Datei vorzuhalten wäre mir persönlich zu groß, der Nutzen ist sowieso bei quasi Null. Wenn jemand das Protokoll für eigene Zwecke "missbrauchen" will, der loggt sowieso die Verbindung zum Server mit - dem ist auch egal, wie aufwändig Du da zu Verschleiern versuchst.
Benutzeravatar
snafu
User
Beiträge: 6867
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Gerhard.S hat geschrieben:wie kann das Thema als gelöst im Titel geändert werden, finde ich immer gut in anderen Foren
Haben wir hier nicht. Und genau das findet neben mir ein großer Teil der hier regelmäßig Schreibenden glaube ich auch ganz gut so. Wir haben hier nicht die Denke, dass ein Thread geschlossen wird, sobald der Threadersteller zufrieden ist, sondern jeder Thread bleibt offen für mögliche weitere Anmerkungen. Ein "[gelöst]" ist zwar noch kein Schließen, suggeriert aber häufig, dass weitere Anmerkungen eher nicht erwünscht sind.
Gerhard.S
User
Beiträge: 23
Registriert: Donnerstag 26. Juni 2014, 17:12

sehe ich anders, wer eine Lösung sucht, kann dann fast sicher sein hier schon eine passende Antwort zu finden und muß nicht viele ungelöste Threads dursuchen
seinen Kommentar kann man doch immer noch dazugeben, ist ja kein Prob.

aber ist Ansichtssache - Katz frist Maus / ich nicht :P
BlackJack

Der Fritzbox-Link ist so besser angegeben weil der Domain-Name ``fritz.box`` normalerweise von der Fritz!Box auf die IP abgebildet wird, wenn sie als DNS-Server verwendet wird (was der Normalfall ist): http://fritz.box/html/capture.html
jerch
User
Beiträge: 1669
Registriert: Mittwoch 4. März 2009, 14:19

Und was macht dieser ominöse Fritzboxlink? :K

Mit Netzwerktools lässt sich ja alles mitschneiden, ohne SSL auch gleich zum Mitlesen in Plaintext. Mit SSL wirds schwieriger, da ist es sicherlich einfacher, sich in Python einfach vor und hinter den Netzwerkaufrufen einzuklinken. Die URL ist immer sichtbar.
BlackJack

@jerch: Der führt zu einer Webseite *auf* der Fritzbox die ein Frontend bietet um auf der Fritzbox den Netzwerkverkehr im Wireshark-Format mitzuschneiden.
Benutzeravatar
sparrow
User
Beiträge: 4538
Registriert: Freitag 17. April 2009, 10:28

Oh, mir fällt gerade auf, dass es hier um Python und Android geht.
Gibt es denn da inzwischen was? So etwas wirklich brauchbares? Ich habe da nämlich eine Idee wie ich mein altes Telefon zu einem zweiten Leben verhelfen könnte - und ich habe irgendwie nicht wirklich Lust wieder Java zu machen.

Gruß
Sebastian
Antworten