HP-Fan
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Abend Forum Letzte Frage des Tages...
Beim Kompilieren wird ja eine höhere Programmiersprache wie Python3 in einen Maschinencode übersetzt.
Wie geht ein solcher Vorgang vonstatten bzw. welche Art von Software verwendet Ihr dafür. Ausgangslage:
Ein Python3-Programm mit diversen "Importen" im Programm-Head, drei Verweise auf GIF-Bildchen, sowie u. a. auch
ein tkinter-Import (auch im Head-Bereich des Programms). Das alles soll also kompiliert werden. Ziel der Prozedur: Ein Startfähiges Programm das in den "Autostartbereich" eines Raspberry's PI3 gelegt werden kann.
Betriebssystem Noob/Raspbian. Das Programm läuft natürlich auch so (unkompiliert), aber ich möchte es kompiliert haben, dass der Programmcode nicht so einfach ersichtlich ist.
Und ja, ich weiss man kann zurück kompilieren... Trotzdem Maschinencode bitte 😀 Gruß HP-Fan
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4668
Wohnort: Berlin
|
@HP-Fan: Vergiss es, das macht mehr Aufwand als es bringt. Insbesondere unter Linux ist es nicht üblich Python-Programme so zu verschleiern. Kompiliert werden sie bei CPython, der Python-Implementierung von python.org, automatisch, und zwar in Bytecode für die Python-Bytecode-VM die das dann ausführt. Der Schritt passiert für Dich als Anwender transparent, und das Kompilat wird auch gecachet, so das nicht jedes mal kompiliert werden muss, sondern nur wenn die Quelltextdatei neuer ist als der gecachete Bytecode. Es läuft also nicht unkompiliert — Du hast von der Kompilierung nur noch nichts mitbekommen weil's im Hintergrund passiert. ☺ Und zu Maschinencode für den Prozessor auf dem das am Ende läuft bekommst Du Python allgemein nicht übersetzt — dazu ist die Sprache einfach zu dynamisch.
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo,
aber ich möchte es kompiliert haben, dass der Programmcode nicht so einfach ersichtlich ist.
Warum? Wenn du die Schöpfungshöhe des Codes für so hoch hältst, dass er schützenswert wäre, dann stell' den Code _vor_ dem veröffentlichen unter eine entsprechend restriktive Lizenz und sei bereit, diese mit den nötigen Rechtsmitteln durchzusetzen. Wenn du dazu nicht bereit bist, dann nimm' direkt eine nicht-restriktive Lizenz (z.B. MIT-Lizenz). Gruß, noisefloor
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Abend Leute @Marc_BlackJack_Rintsch Habe mich etwas eingelesen: http://www.marcogabriel.com/blog/archives/343-Python-Scripte-mit-PyInstaller-als-.exe-verteilen.html Das stimmt, der Aufwand ist nicht unerheblich.
Das wäre es mir aber trotzdem wert. @noisefloor Das mit der Lizenz trifft sicherlich auf ein Massenprodukt zu, wenn dies kommerziell veräußert werden soll.
Wenn es aber darum geht, den Programmcode nicht so einfach für jederman zugänglich zu machen, nützt diese "Lizenz" reichlich wenig. @all Nun... daraus folgt, dass eine Kompilierung zur .exe nur unter Windows-Systemen als sinnvoll gilt. Weil da gleich mit Python und allem drum und dran
zusammen kompiliert wird und man eine lauffähige Datei erhält. Der Geschwindikeitsverlust spielt für meine Art der Anwendung keine Rolle. Wie stehen eigentlich die Chancen, Wine auf einem Raspberry mit Raspbian zum Laufen zu bekommen...? 😀 Gruß HP-Fan
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4668
Wohnort: Berlin
|
@HP-Fan: Wie stehen eigentlich die Chancen, Wine auf einem Raspberry mit Raspbian zum Laufen zu bekommen...? 😀
Die stehen bei 0 weil Wine nur die Windows-Umgebung ”simuliert” aber nicht die Hardware, und Windowsprogramme wollen in der Regel keinen ARM als Prozessor haben.
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo,
Das mit der Lizenz trifft sicherlich auf ein Massenprodukt zu, wenn dies kommerziell veräußert werden soll. Wenn es aber darum geht, den Programmcode nicht so einfach für jederman zugänglich zu machen, nützt diese "Lizenz" reichlich wenig.
100% falsch. Die Lizenz hat _nichts_ mit kommerziell zu tun, so rein gar nichts. Mit der Lizenz kannst du grundsätzlich die Weiternutzung deines Codes beeinflussen. Genau aus dem Grund stehen haben auch OSS Projekte eine Lizenz und darum gibt es auch diversen Lizenzen, von restritiver (z.B. GPL) bis offener (z.B. MIT).
Nun... daraus folgt, dass eine Kompilierung zur .exe nur unter Windows-Systemen als sinnvoll gilt.
Wie kommst du denn jetzt auf Windows? Davon ist bis dato hier so null die Rede. Mal abgesehen davon ist hier ein Ubuntu-Forum, d.h. deine mögliche Windows-Probleme kannst du bestenfalls in der Lounge posten. Und, FYI: .exe != kompliliert Gruß, noisefloor
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Hallo zusammen
100% falsch. Die Lizenz hat _nichts_ mit kommerziell zu tun, so rein gar nichts. Mit der Lizenz kannst du grundsätzlich die Weiternutzung deines Codes beeinflussen.
Nein, 100% richtig! Lass mich das ausführen: Es ist auch verboten, auf der Autobahn im 120er Bereich mit 200 km/h drüber zu "brezeln" - und trotzdem wird es gemacht 😉
Eine Lizenz nützt nur, wenn du deine Ansprüche rechtlich durchdrücken willst! Und da geht es eben meistens um Geld - viel Geld → ergo kommerziell.
Vor schnellen Blicken in den Programmcode nützt eine Lizenz, mit Verlaub, einen Sch***... 😉
Immer diese Gutmenschen... 😈
Wie kommst du denn jetzt auf Windows?
Na weil der Marc Gabriel in seinem Blog sagt, dass .exe Pythonprogramme unter Windos lauffähig sind. Auf Linux kann ja scheinbar nicht kompiliert werden, oder es ist zumindest nicht üblich - wie Marc_BlackJack_Rintsch schreibt. Die stehen bei 0 weil Wine nur die Windows-Umgebung ”simuliert” aber nicht die Hardware, und Windowsprogramme wollen in der Regel keinen ARM als Prozessor haben.
Schade, über den Umweg "Windosumgebung" hätte ich eine .exe erstellen können. Hier mal noch was anderes, was peripher noch zum Thema passt: Ich habe hier was gelesen: https://www.heise.de/forum/heise-Developer/News-Kommentare/Python-ist-verbreitetste-Einsteiger-Programmiersprache-an-US-Top-Universitaeten/FRAGE-Wie-Python-Source-Code-schuetzen-wenn-Testversionen-zu-verteilen/posting-2739453/show/ Kann mir jemand kurz verständlich erklären, was es mit .pyc und .pyo auf sich hat?
Und was genau ist cx_Freeze, bzw. hat jemand Erfahrung damit?
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo,
Eine Lizenz nützt nur, wenn du deine Ansprüche rechtlich durchdrücken willst!
Sagte ich bereits... siehe oben. Was und warum willst du den Schützen? Die Aussage fehlt deinerseits noch. Wenn du irgendeine schwachbrüstige Krypto-Funktion meinst so (=kompilieren) schützen zu können → vergiss es. Dann braucht der Angreifer halt nicht Sekunden, sondern Minuten. Ergo: nützt nix. Wenn du natürlich grottigen Code einfach vor den Augen der Öffentlichkeit verstecken willst... ok 😉 Aber dann sollte man lieber etwas mehr Mühe in den Code investieren... Gruß, noisefloor
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Nachtrag:
Kann mir jemand kurz verständlich erklären, was es mit .pyc und .pyo auf sich hat?
Guckst du: https://stackoverflow.com/questions/8822335/what-do-the-python-file-extensions-pyc-pyd-pyo-stand-for, 1. Antwort. pyc ist der komplilierte Bytecode (funktioniert sogar unter Python 😉 ), aber der lässt sich leicht in Code zurück wandeln. Gruß, noisefloor
|
HP-Fan
(Themenstarter)
Anmeldungsdatum: 2. September 2012
Beiträge: 394
Wohnort: Schweiz (CH)
|
Hallo noisefloor
Was und warum willst du den Schützen?
Diese Frage ist für die Beantwortung meiner Frage völlig irrelevant! Es kann dir doch egal sein, worin meine Intension jetzt genau besteht! 😉 Die eigentlichen Fragestellung war → Ist Python3 Programmcode - irgendwie schützbar? (Ja/Nein/Wenn ja, wie)
Oder wenigstens die Einblicknahme in das Programm zu erschweren? (Ja/Nein/Wenn ja, wie) Gruß HP-Fan PS. Ich seh gerade, dass die von mir gemachten Fragen zu .pyo und .pyc doch noch beantwortet worden sind - hat sich wohl mit dem post überschnitten - Danke 👍
|
Marc_BlackJack_Rintsch
Ehemalige
Anmeldungsdatum: 16. Juni 2006
Beiträge: 4668
Wohnort: Berlin
|
@HP-Fan: Was und warum ist in sofern wichtig als das man sich als Helfender überlegt ob es Sinn macht Zeit auf die Beantwortung der Frage(n) zu verwenden. Wenn Du kein sinnvolles Ziel nennen kannst, welches erreicht werden soll, also das warum, nicht das wie, dann macht das für einige eben keinen Sinn sich damit zu beschäftigen. Wenn Du nicht willst das jemand Deinen Code, in welcher Form auch immer, in die Finger bekommt, dann musst Du zumindest den ”geheimen” Teil nie an den/die Anwender ausliefern. Also zum Beispiel als Webservice bereit stellen. Dann bleibt der Code auf Deinem Server.
|
sebix
Moderator, Webteam
Anmeldungsdatum: 14. April 2009
Beiträge: 5576
|
Du kannst dafuer Cython verwenden. Mit Cython wird der Python-Code in C-Code verwandelt, denn man dann mit gcc kompilieren kann. Dann bleibt nur noch die Abhaengigkeit zur libpython, die aber ohnehin vorhanden ist. | cython deinprogramm.py --embed
|
Dann hast du ein deinprogramm.c .
Und dann kompilieren:
| gcc -Os -I /usr/include/python3.6m -o deinprogramm deinprogramm.c -lpython3.6m -lpthread -lm -lutil -ldl
|
Die Python-Version musst du eventuell anpassen. Dann ist in deinprogramm die gewuenschte Datei.
|
noisefloor
Anmeldungsdatum: 6. Juni 2006
Beiträge: 29567
|
Hallo, @Sebix: IMHO muss es bei deinem Beispiel cython3 heißen und AFAIK ist python3-dev nicht in der Standardinstallation enthalten. Nachtrag @HP-Fan: wenn das Programm auf dem Raspi laufen soll, dann musst du entweder auf deinem x86 Rechner einen Cross-Compiler bemühen oder auf dem Raspi kompilieren. Auf x86 kompilierte Programme laufen nicht auf ARM. Gruß, noisefloor
|