compileall — Byte-kompiliert Python-Bibliotheken¶
Quellcode: Lib/compileall.py
Dieses Modul bietet einige Hilfsfunktionen zur Unterstützung der Installation von Python-Bibliotheken. Diese Funktionen kompilieren Python-Quelldateien in einem Verzeichnisbaum. Dieses Modul kann verwendet werden, um die zwischengespeicherten Bytecode-Dateien zur Zeit der Bibliotheksinstallation zu erstellen, wodurch sie auch für Benutzer verfügbar sind, die keine Schreibberechtigung für die Bibliotheksverzeichnisse haben.
Verfügbarkeit: nicht WASI.
Dieses Modul funktioniert nicht oder ist nicht auf WebAssembly verfügbar. Weitere Informationen finden Sie unter WebAssembly-Plattformen.
Verwendung über die Befehlszeile¶
Dieses Modul kann als Skript (mit python -m compileall) verwendet werden, um Python-Quellen zu kompilieren.
- directory ...¶
- file ...¶
Positionsargumente sind zu kompilierende Dateien oder Verzeichnisse, die Quelldateien enthalten und rekursiv durchlaufen werden. Wenn kein Argument angegeben wird, verhält es sich so, als ob die Befehlszeile
-l <Verzeichnisse aus sys.path>lautete.
- -l¶
Rekursives Eingehen in Unterverzeichnisse nicht durchführen, nur Quelldateien direkt in den benannten oder implizierten Verzeichnissen kompilieren.
- -f¶
Erzwinge Neuberechnung auch dann, wenn die Zeitstempel aktuell sind.
- -q¶
Die Liste der kompilierten Dateien nicht ausgeben. Wenn einmal übergeben, werden Fehlermeldungen immer noch ausgegeben. Wenn zweimal übergeben (
-qq), wird jegliche Ausgabe unterdrückt.
- -d destdir¶
Verzeichnis, das dem Pfad zu jeder kompilierten Datei vorangestellt wird. Dies erscheint in Tracebacks zur Kompilierungszeit und wird auch in die Bytecode-Datei kompiliert, wo es in Tracebacks und anderen Meldungen verwendet wird, wenn die Quelldatei zum Zeitpunkt der Ausführung der Bytecode-Datei nicht existiert.
- -s strip_prefix¶
Entferne das angegebene Präfix aus den in den
.pyc-Dateien aufgezeichneten Pfaden. Pfade werden relativ zum Präfix gemacht.Diese Option kann mit
-pverwendet werden, aber nicht mit-d.
- -p prepend_prefix¶
Füge das angegebene Präfix den in den
.pyc-Dateien aufgezeichneten Pfaden voran. Verwende-p /, um die Pfade absolut zu machen.Diese Option kann mit
-sverwendet werden, aber nicht mit-d.
- -x regex¶
regex wird verwendet, um den vollständigen Pfad zu jeder Datei zu durchsuchen, die für die Kompilierung in Betracht gezogen wird, und wenn die Regex eine Übereinstimmung ergibt, wird die Datei übersprungen.
- -i list¶
Lese die Datei
listund füge jede Zeile, die sie enthält, der Liste der zu kompilierenden Dateien und Verzeichnisse hinzu. Wennlist-ist, lese Zeilen vonstdin.
- -b¶
Schreibe die Bytecode-Dateien an ihre Legacy-Speicherorte und -namen, was Bytecode-Dateien überschreiben kann, die von einer anderen Python-Version erstellt wurden. Standardmäßig werden Dateien an ihre PEP 3147-Speicherorte und -namen geschrieben, was es ermöglicht, dass Bytecode-Dateien von mehreren Python-Versionen nebeneinander existieren.
- -r¶
Steuere die maximale Rekursionsebene für Unterverzeichnisse. Wenn dies angegeben ist, dann wird die Option
-lnicht berücksichtigt. python -m compileall <directory> -r 0 ist äquivalent zu python -m compileall <directory> -l.
- -j N¶
Verwende N Worker, um die Dateien im angegebenen Verzeichnis zu kompilieren. Wenn
0verwendet wird, dann wird das Ergebnis vonos.process_cpu_count()verwendet.
- --invalidation-mode [timestamp|checked-hash|unchecked-hash]¶
Steuere, wie die generierten Bytecode-Dateien zur Laufzeit ungültig gemacht werden. Der Wert
timestampbedeutet, dass.pyc-Dateien mit dem Zeitstempel und der Größe der Quelle eingebettet generiert werden. Die Wertechecked-hashundunchecked-hashführen zur Generierung von hash-basierten pycs. Hash-basierte pycs betten einen Hash des Inhalts der Quelldatei anstelle eines Zeitstempels ein. Siehe Gültigkeitsprüfung von Bytecode-Caches für weitere Informationen darüber, wie Python Bytecode-Cache-Dateien zur Laufzeit validiert. Standardmäßig isttimestampgesetzt, wenn die UmgebungsvariableSOURCE_DATE_EPOCHnicht gesetzt ist, undchecked-hash, wenn die UmgebungsvariableSOURCE_DATE_EPOCHgesetzt ist.
- -o level¶
Kompiliere mit dem angegebenen Optimierungsgrad. Kann mehrmals verwendet werden, um für mehrere Grade gleichzeitig zu kompilieren (z.B.
compileall -o 1 -o 2).
- -e dir¶
Ignoriere Symlinks, die außerhalb des angegebenen Verzeichnisses zeigen.
- --hardlink-dupes¶
Wenn zwei
.pyc-Dateien mit unterschiedlichem Optimierungsgrad den gleichen Inhalt haben, verwende Hardlinks, um doppelte Dateien zu konsolidieren.
Geändert in Version 3.2: Die Optionen -i, -b und -h hinzugefügt.
Geändert in Version 3.5: Die Optionen -j, -r und -qq hinzugefügt. Die Option -q wurde zu einem mehrstufigen Wert geändert. -b erzeugt immer eine Bytecode-Datei, die auf .pyc endet, niemals .pyo.
Geändert in Version 3.7: Die Option --invalidation-mode hinzugefügt.
Geändert in Version 3.9: Die Optionen -s, -p, -e und --hardlink-dupes hinzugefügt. Das Standard-Rekursionslimit wurde von 10 auf sys.getrecursionlimit() erhöht. Möglichkeit hinzugefügt, die Option -o mehrmals anzugeben.
Es gibt keine Befehlszeilenoption, um den von der Funktion compile() verwendeten Optimierungsgrad zu steuern, da der Python-Interpreter selbst die Option bietet: python -O -m compileall.
Ähnlich respektiert die Funktion compile() die Einstellung sys.pycache_prefix. Der generierte Bytecode-Cache ist nur dann nützlich, wenn compile() mit demselben sys.pycache_prefix (falls vorhanden) ausgeführt wird, der zur Laufzeit verwendet wird.
Öffentliche Funktionen¶
- compileall.compile_dir(dir, maxlevels=sys.getrecursionlimit(), ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, workers=1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)¶
Durchsucht rekursiv den Verzeichnisbaum, der durch dir benannt ist, und kompiliert dabei alle
.py-Dateien. Gibt einen wahren Wert zurück, wenn alle Dateien erfolgreich kompiliert wurden, andernfalls einen falschen Wert.Der Parameter maxlevels wird verwendet, um die Tiefe der Rekursion zu begrenzen; er hat standardmäßig den Wert
sys.getrecursionlimit().Wenn ddir angegeben ist, wird es dem Pfad jeder kompilierten Datei vorangestellt, um in Tracebacks zur Kompilierungszeit verwendet zu werden, und wird auch in die Bytecode-Datei kompiliert, wo es in Tracebacks und anderen Meldungen verwendet wird, wenn die Quelldatei zum Zeitpunkt der Ausführung der Bytecode-Datei nicht existiert.
Wenn force true ist, werden Module neu kompiliert, auch wenn die Zeitstempel aktuell sind.
Wenn rx gegeben ist, wird seine
search-Methode auf den vollständigen Pfad jeder Datei angewendet, die für die Kompilierung in Betracht gezogen wird. Wenn sie einen wahren Wert zurückgibt, wird die Datei übersprungen. Dies kann verwendet werden, um Dateien auszuschließen, die einem regulären Ausdruck entsprechen, der als re.Pattern-Objekt angegeben ist.Wenn quiet
Falseoder0(Standard) ist, werden die Dateinamen und andere Informationen auf die Standardausgabe ausgegeben. Wenn auf1gesetzt, werden nur Fehler ausgegeben. Wenn auf2gesetzt, wird jegliche Ausgabe unterdrückt.Wenn legacy true ist, werden Bytecode-Dateien an ihre Legacy-Speicherorte und -namen geschrieben, was Bytecode-Dateien überschreiben kann, die von einer anderen Python-Version erstellt wurden. Standardmäßig werden Dateien an ihre PEP 3147-Speicherorte und -namen geschrieben, was es ermöglicht, dass Bytecode-Dateien von mehreren Python-Versionen nebeneinander existieren.
optimize gibt den Optimierungsgrad für den Compiler an. Er wird an die eingebaute Funktion
compile()übergeben. Akzeptiert auch eine Sequenz von Optimierungsgraden, die zu mehreren Kompilierungen einer.py-Datei in einem Aufruf führen.Das Argument workers gibt an, wie viele Worker zum parallelen Kompilieren von Dateien verwendet werden. Standardmäßig werden keine mehreren Worker verwendet. Wenn die Plattform keine mehreren Worker verwenden kann und das Argument workers angegeben ist, wird stattdessen eine sequentielle Kompilierung als Fallback verwendet. Wenn workers 0 ist, wird die Anzahl der Kerne im System verwendet. Wenn workers kleiner als
0ist, wird einValueErrorausgelöst.invalidation_mode sollte ein Mitglied der Enum
py_compile.PycInvalidationModesein und steuert, wie die generierten pycs zur Laufzeit ungültig gemacht werden.Die Argumente stripdir, prependdir und limit_sl_dest entsprechen den oben beschriebenen Optionen
-s,-pund-e. Sie können alsstroderos.PathLikeangegeben werden.Wenn hardlink_dupes true ist und zwei
.pyc-Dateien mit unterschiedlichem Optimierungsgrad den gleichen Inhalt haben, werden Hardlinks verwendet, um doppelte Dateien zu konsolidieren.Geändert in Version 3.2: Die Parameter legacy und optimize hinzugefügt.
Geändert in Version 3.5: Der Parameter workers hinzugefügt.
Geändert in Version 3.5: Der Parameter quiet wurde zu einem mehrstufigen Wert geändert.
Geändert in Version 3.5: Der Parameter legacy schreibt nur
.pyc-Dateien, nicht.pyo-Dateien, unabhängig vom Wert von optimize.Geändert in Version 3.6: Akzeptiert ein pfadähnliches Objekt.
Geändert in Version 3.7: Der Parameter invalidation_mode wurde hinzugefügt.
Geändert in Version 3.7.2: Der Standardwert des Parameters invalidation_mode wurde auf
Noneaktualisiert.Geändert in Version 3.8: Das Setzen von workers auf 0 wählt nun die optimale Anzahl von Kernen aus.
Geändert in Version 3.9: Die Argumente stripdir, prependdir, limit_sl_dest und hardlink_dupes hinzugefügt. Der Standardwert von maxlevels wurde von
10aufsys.getrecursionlimit()geändert.
- compileall.compile_file(fullname, ddir=None, force=False, rx=None, quiet=0, legacy=False, optimize=-1, invalidation_mode=None, *, stripdir=None, prependdir=None, limit_sl_dest=None, hardlink_dupes=False)¶
Kompiliert die Datei mit dem Pfad fullname. Gibt einen wahren Wert zurück, wenn die Datei erfolgreich kompiliert wurde, andernfalls einen falschen Wert.
Wenn ddir angegeben ist, wird es dem Pfad der zu kompilierenden Datei vorangestellt, um in Tracebacks zur Kompilierungszeit verwendet zu werden, und wird auch in die Bytecode-Datei kompiliert, wo es in Tracebacks und anderen Meldungen verwendet wird, wenn die Quelldatei zum Zeitpunkt der Ausführung der Bytecode-Datei nicht existiert.
Wenn rx gegeben ist, wird seine
search-Methode auf den vollständigen Pfadnamen der zu kompilierenden Datei angewendet. Wenn sie einen wahren Wert zurückgibt, wird die Datei nicht kompiliert undTruezurückgegeben. Dies kann verwendet werden, um Dateien auszuschließen, die einem regulären Ausdruck entsprechen, der als re.Pattern-Objekt angegeben ist.Wenn quiet
Falseoder0(Standard) ist, werden die Dateinamen und andere Informationen auf die Standardausgabe ausgegeben. Wenn auf1gesetzt, werden nur Fehler ausgegeben. Wenn auf2gesetzt, wird jegliche Ausgabe unterdrückt.Wenn legacy true ist, werden Bytecode-Dateien an ihre Legacy-Speicherorte und -namen geschrieben, was Bytecode-Dateien überschreiben kann, die von einer anderen Python-Version erstellt wurden. Standardmäßig werden Dateien an ihre PEP 3147-Speicherorte und -namen geschrieben, was es ermöglicht, dass Bytecode-Dateien von mehreren Python-Versionen nebeneinander existieren.
optimize gibt den Optimierungsgrad für den Compiler an. Er wird an die eingebaute Funktion
compile()übergeben. Akzeptiert auch eine Sequenz von Optimierungsgraden, die zu mehreren Kompilierungen einer.py-Datei in einem Aufruf führen.invalidation_mode sollte ein Mitglied der Enum
py_compile.PycInvalidationModesein und steuert, wie die generierten pycs zur Laufzeit ungültig gemacht werden.Die Argumente stripdir, prependdir und limit_sl_dest entsprechen den oben beschriebenen Optionen
-s,-pund-e. Sie können alsstroderos.PathLikeangegeben werden.Wenn hardlink_dupes true ist und zwei
.pyc-Dateien mit unterschiedlichem Optimierungsgrad den gleichen Inhalt haben, werden Hardlinks verwendet, um doppelte Dateien zu konsolidieren.Hinzugefügt in Version 3.2.
Geändert in Version 3.5: Der Parameter quiet wurde zu einem mehrstufigen Wert geändert.
Geändert in Version 3.5: Der Parameter legacy schreibt nur
.pyc-Dateien, nicht.pyo-Dateien, unabhängig vom Wert von optimize.Geändert in Version 3.7: Der Parameter invalidation_mode wurde hinzugefügt.
Geändert in Version 3.7.2: Der Standardwert des Parameters invalidation_mode wurde auf
Noneaktualisiert.Geändert in Version 3.9: Die Argumente stripdir, prependdir, limit_sl_dest und hardlink_dupes hinzugefügt.
- compileall.compile_path(skip_curdir=True, maxlevels=0, force=False, quiet=0, legacy=False, optimize=-1, invalidation_mode=None)¶
Kompiliert Bytecode aller
.py-Dateien, die entlangsys.pathgefunden werden. Gibt einen wahren Wert zurück, wenn alle Dateien erfolgreich kompiliert wurden, andernfalls einen falschen Wert.Wenn skip_curdir true ist (Standard), wird das aktuelle Verzeichnis nicht in die Suche einbezogen. Alle anderen Parameter werden an die Funktion
compile_dir()übergeben. Beachten Sie, dass im Gegensatz zu den anderen Kompilierungsfunktionenmaxlevelsstandardmäßig0ist.Geändert in Version 3.2: Die Parameter legacy und optimize hinzugefügt.
Geändert in Version 3.5: Der Parameter quiet wurde zu einem mehrstufigen Wert geändert.
Geändert in Version 3.5: Der Parameter legacy schreibt nur
.pyc-Dateien, nicht.pyo-Dateien, unabhängig vom Wert von optimize.Geändert in Version 3.7: Der Parameter invalidation_mode wurde hinzugefügt.
Geändert in Version 3.7.2: Der Standardwert des Parameters invalidation_mode wurde auf
Noneaktualisiert.
Um eine Neuberechnung aller .py-Dateien im Unterverzeichnis Lib/ und all seinen Unterverzeichnissen zu erzwingen
import compileall
compileall.compile_dir('Lib/', force=True)
# Perform same compilation, excluding files in .svn directories.
import re
compileall.compile_dir('Lib/', rx=re.compile(r'[/\\][.]svn'), force=True)
# pathlib.Path objects can also be used.
import pathlib
compileall.compile_dir(pathlib.Path('Lib/'), force=True)
Siehe auch
- Modul
py_compile Byte-kompiliert eine einzelne Quelldatei.