Python byte-compilierung abschalten / disable byte compiling

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
bughunter
User
Beiträge: 19
Registriert: Montag 28. Juli 2008, 13:51

Hallo,

wie kann man den Python so ausführen das keine .pyc Dateien aus meinen modulen erstellt werden??? (keine Schreibrechte) Ich bin dem ganzen schon auf der Spur ... irgendwas mit "dry run" war es glaube ich... - ich wüsste auch gern ob man auch interaktiv etwas tun kann oder parst bzw. compiliert python alles fertig bevor ein Teil eines Programmes läuft, so könnte man erst feststellen ob man schreiben darf und falls ja darf dann ruhig optimiert/compiliert werden.

Danke im Voraus.

Viele Grüße
bughunter
Darii
User
Beiträge: 1177
Registriert: Donnerstag 29. November 2007, 17:02

Wenn man keine Schreibrechte hat, werden keine .pyc-Dateien erstellt. Da brauchst du nichts einstellen.
bughunter
User
Beiträge: 19
Registriert: Montag 28. Juli 2008, 13:51

Danke für die schnelle Antwort, kann man dennoch die byte-compilierung abstellen?
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Hallo bughunter, willkommen im Forum,
bughunter hat geschrieben:Danke für die schnelle Antwort, kann man dennoch die byte-compilierung abstellen?
Du meinst manuell auslösen?

In den entsprechenden Ordner wechseln und folgendes ausführen:

Code: Alles auswählen

python -m compileall .
(Den Punkt am Ende nicht vergessen, der bedeutet, dass nur der aktuelle Ordner verarbeitet werden soll)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
bughunter
User
Beiträge: 19
Registriert: Montag 28. Juli 2008, 13:51

:!: Nein :!: kurz gesagt möchte ich verhindern das mein python-modul einfach compiliert wird.
Es sollen keine .pyc Dateien geschrieben werden, ich möchte im reinen-Interperter modus starten bzw. umschalten können falls dies zur Laufzeit möglich ist. Bei den internen Funktionen gab es eine Möglichkeit über ein sogenanntes dry_run flag ...

aus der Python 2.5 Doku - Abschnitt:
11.13 distutils.util -- Miscellaneous other utility functions :
byte_compile( py_files[, optimize=0, force=0, prefix=None, base_dir=None, verbose=1, dry_run=0, direct=None])

Byte-compile a collection of Python source files to either .pyc or .pyo files in the same directory. py_files is a list of files to compile; any files that don't end in .py are silently skipped. optimize must be one of the following:
0 - don't optimize (generate .pyc)
1 - normal optimization (like "python -O")
2 - extra optimization (like "python -OO")
If force is true, all files are recompiled regardless of timestamps.

The source filename encoded in each bytecode file defaults to the filenames listed in py_files; you can modify these with prefix and basedir. prefix is a string that will be stripped off of each source filename, and base_dir is a directory name that will be prepended (after prefix is stripped). You can supply either or both (or neither) of prefix and base_dir, as you wish.

If dry_run is true, doesn't actually do anything that would affect the filesystem.

Byte-compilation is either done directly in this interpreter process with the standard py_compile module, or indirectly by writing a temporary script and executing it. Normally, you should let byte_compile() figure out to use direct compilation or not (see the source for details). The direct flag is used by the script generated in indirect mode; unless you know what you're doing, leave it set to None.
... daher meine Frage ob bzw. wie man den Interpreter entsprechend anweisen kann.

Danke & Viele Grüße
bughunter
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Achso. Nein, das geht nicht. Das macht aber von der Performance sowieso keinen Unterschied, da CPython ein Bytecode-Interpreter ist (sich da also von Ruby 1.8 unterscheidet und der JVM gleicht), also wird immer Bytecode abgearbeitet. Wenn es diesen nicht gibt wird er angelegt.

Der einzige Weg das in Python 2.x (bei x < 5) zu verhindern ist die Berechtigungen so zu setzen, dass der Interpreter keine Dateien schreiben kann - aber Bytecode wird so oder so generiert. Python 3.0 hat noch eine Option ``-B`` mit dem man das schreiben der Bytecode-Dateien verhindern kann (aber es wird auch da Bytecode generiert).
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

@bughunter: Dieser sechs Jahre alte gut abgehangene Bug deutet an, dass es in Python 2.6 gehen wird. In der aktuellen Version erzeugt Python die pyc-Dateien jedoch, wenn er/sie/es es darf.

Ich kann mir aber vorstellen, dass es recht einfach wäre, den Python-Quelltext derart zu patchen, dass das Erzeugen der pyc-Dateien immer unterdrückt wird und dann eine eigene Python Version zu kompilieren. Ich tippe auf `write_compiled_module` in `Python/import.c`. Macht man diese Funktion zu einem no-op und sollte dies die einzige Stelle sein, wo eine pyc-Datei geschrieben wird, könnte das bereits reichen.

Stefan
bughunter
User
Beiträge: 19
Registriert: Montag 28. Juli 2008, 13:51

Ok. Danke für eure Hilfe.

Es ist nicht zu fassen das man dafür 6 Jahre benötigt ... 52560 Stunden Pizza gegessen ???
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

bughunter hat geschrieben:Es ist nicht zu fassen das man dafür 6 Jahre benötigt ... 52560 Stunden Pizza gegessen ???
Nein, zu wenig Bedarf dafür.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Antworten