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
Python byte-compilierung abschalten / disable byte compiling
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Hallo bughunter, willkommen im Forum,
In den entsprechenden Ordner wechseln und folgendes ausführen:
(Den Punkt am Ende nicht vergessen, der bedeutet, dass nur der aktuelle Ordner verarbeitet werden soll)
Du meinst manuell auslösen?bughunter hat geschrieben:Danke für die schnelle Antwort, kann man dennoch die byte-compilierung abstellen?
In den entsprechenden Ordner wechseln und folgendes ausführen:
Code: Alles auswählen
python -m compileall .
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
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 :
Danke & Viele Grüße
bughunter
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 :
... daher meine Frage ob bzw. wie man den Interpreter entsprechend anweisen kann.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.
Danke & Viele Grüße
bughunter
-
- 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).
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
@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
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
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Nein, zu wenig Bedarf dafür.bughunter hat geschrieben:Es ist nicht zu fassen das man dafür 6 Jahre benötigt ... 52560 Stunden Pizza gegessen ???
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice