Hi zusammen,
ich bin ein Newbie in Python
Habe mir eine kleine Klasse geschrieben und wollte mal Fragen ob man diese vorkompilieren kann ?
Kann man aus einer [*.py] eine [*.pyc] oder [*.pyo] machen und dann in einen z.B. test.py importieren
Oder gibt es überhaupt eine Möglichkeit eine .py binär zu erstellen ?
Gruß
Bossi
[Python] aus *.py eine *.pyc oder *.pyo erstellen ?
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Der Python Interpreter macht das beim ersten import ganz von alleine Wenn die source-py Datei verändert wird, aktualisiert er auch die *.pyc Datei voll automatisch...
Also du brauchst dich um sowas nicht kümmern Man kann es dennoch auch zu Fuss machen, wenn man Spass hat: http://effbot.org/zone/python-compile.htm
Also du brauchst dich um sowas nicht kümmern Man kann es dennoch auch zu Fuss machen, wenn man Spass hat: http://effbot.org/zone/python-compile.htm
Hi,
ich will eigentlich mein Script davor schützen das nicht jeder drin umschreiben kann )
Also möchte ich aus der .py eine .pyc machen und diese dann in einer anderen .py einbinden.
Aber der Link macht das in der Beschreibung nicht so oder, mein English ist nicht so dolle
ich will eigentlich mein Script davor schützen das nicht jeder drin umschreiben kann )
Also möchte ich aus der .py eine .pyc machen und diese dann in einer anderen .py einbinden.
Aber der Link macht das in der Beschreibung nicht so oder, mein English ist nicht so dolle
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Auch wenn ich nicht verstehen kann, warum man sowas tun sollte... Ich hab mal schnell einen Test gemacht:
test.py
test2.py
nun führt man einmal test.py aus... Dabei werden die Dateien test.pyc und test2.pyc erstellt... Nun kann man test2.py löschen und dennoch das test.py ausführen und es läuft.
Fazit: Man kann ohne weiteres alle *.py löschen, wenn *.pyc Dateien existieren. Mit dem "StartSkript" (In dem Beispiel: test.py) funktionierte das spontan nicht.
Aus den *.pyc Dateien kann man allerdings theoretisch wieder *.py Dateien generieren. Faktisch sieht es aber so aus, das es IMHO z.Z. kein freies Tool dafür gibt.
btw. man kann auch einen Schritt weiter geben und "Opzimize" verwenden. Also das Startskript so starten:
Dabei wird eine test2.pyo erstellt, statt eine *.pyc... Und wie man schon vermutet, nur die *.pyo Datei ist zum starten notwendig...
Vielleicht willst du auch nur eine EXE Datei erstellen? Dann schau mal hier: [wiki]FAQ#WoGibtEsEinenPythonCompiler[/wiki]
btw. Wir sollten man ein Punkt in die FAQ einfügen: "Ich möchte meinen Quellentext verschlüsseln"
test.py
Code: Alles auswählen
import test2
Code: Alles auswählen
import sys
print "test2"
print sys.path
Fazit: Man kann ohne weiteres alle *.py löschen, wenn *.pyc Dateien existieren. Mit dem "StartSkript" (In dem Beispiel: test.py) funktionierte das spontan nicht.
Aus den *.pyc Dateien kann man allerdings theoretisch wieder *.py Dateien generieren. Faktisch sieht es aber so aus, das es IMHO z.Z. kein freies Tool dafür gibt.
btw. man kann auch einen Schritt weiter geben und "Opzimize" verwenden. Also das Startskript so starten:
Code: Alles auswählen
python -OO test.py
Vielleicht willst du auch nur eine EXE Datei erstellen? Dann schau mal hier: [wiki]FAQ#WoGibtEsEinenPythonCompiler[/wiki]
btw. Wir sollten man ein Punkt in die FAQ einfügen: "Ich möchte meinen Quellentext verschlüsseln"
Zuletzt geändert von jens am Donnerstag 26. April 2007, 08:33, insgesamt 1-mal geändert.
So gehts:
Aber jetzt hat er alle *.py zu pyc gemacht, habe es mit Pfad versucht:
Aber das kommt immer:
Code: Alles auswählen
import compileall
compileall.compile_dir(".", force=1)
Code: Alles auswählen
import compileall
compileall.compile_dir("E:\test.py", force=1)
>>> compileall.compile_dir("e:\\test.py", force=1)
Listing e:\test.py ...
Can't list e:\test.py
1
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Jo, dann lad einfach nur die *.pyc oder *.pyo Dateien hoch (Bis auf das Startskript)...
IMHO sollten die *.pyo auch ein klein wenig performanter sein
Dann hast du im Prinzip genau das, was du möchtest... Erstmal kann keiner in dein Skript schauen...
@bossi: Es heißt ja auch compile_dir und nicht compile_file
EDIT Es gibt auch ein py_compile.compile(): http://www.python.org/doc/current/lib/m ... mpile.html
IMHO sollten die *.pyo auch ein klein wenig performanter sein
Dann hast du im Prinzip genau das, was du möchtest... Erstmal kann keiner in dein Skript schauen...
@bossi: Es heißt ja auch compile_dir und nicht compile_file
EDIT Es gibt auch ein py_compile.compile(): http://www.python.org/doc/current/lib/m ... mpile.html
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
Nimm doch einfach compileall.compile_dir()
So wie ich die Doku verstehe, kommen *.pyo Dateien raus, wenn der aktuell gestartete Interpreter auch mit -OO gestartet wurde... Weiß es aber nicht genau... teste es mal...
Schau dir mal den Thread http://www.python-forum.de/topic-7472.html zum Thema Optimize an. Dort steht auch, was da überhaupt passiert.
So wie ich die Doku verstehe, kommen *.pyo Dateien raus, wenn der aktuell gestartete Interpreter auch mit -OO gestartet wurde... Weiß es aber nicht genau... teste es mal...
Schau dir mal den Thread http://www.python-forum.de/topic-7472.html zum Thema Optimize an. Dort steht auch, was da überhaupt passiert.
-
- User
- Beiträge: 188
- Registriert: Donnerstag 20. Juli 2006, 20:46
- Wohnort: Wien
- Kontaktdaten:
hmm...bossi hat geschrieben:Nein ich will keine exe erstellen, das soll für ein Website sein
spätestens jetzt ist jeglicher sinn dahinter zumindest für mich verloren
Du willst nicht das andere in deinem Source herumpfuschen der eigentlich sowieso nicht sichtbar ist?
lgherby