Was ist __pycache__?
Soweit ich weiß, ist ein Cache eine verschlüsselte Datei mit ähnlichen Dateien.
Was machen wir mit dem Ordner __pycache__
? Geben wir ihn anstelle unseres Quellcodes an andere weiter? Sind das nur meine Eingabedaten? Dieser Ordner wird ständig erstellt, wofür ist er da?
554
3
Wenn Sie ein Programm in Python ausführen, kompiliert der Interpreter es zuerst in Bytecode (dies ist eine starke Vereinfachung) und speichert es im Ordner
__pycache__
. Wenn Sie dort nachsehen, werden Sie eine Reihe von Dateien finden, die die Namen der .py-Dateien in Ihrem Projektordner teilen, nur ihre Erweiterungen sind entweder .pyc oder .pyo. Dies sind bytecode-kompilierte und optimierte bytecode-kompilierte Versionen Ihrer Programmdateien.Als Programmierer können Sie sie weitgehend ignorieren... Es sorgt lediglich dafür, dass Ihr Programm ein wenig schneller startet. Wenn sich Ihre Skripte ändern, werden sie neu kompiliert, und wenn Sie die Dateien oder den gesamten Ordner löschen und Ihr Programm erneut ausführen, erscheinen sie wieder (es sei denn, Sie unterdrücken dieses Verhalten ausdrücklich)
Wenn Sie cpython verwenden (was am häufigsten vorkommt, da es die Referenzimplementierung ist) und Sie diesen Ordner nicht haben wollen, können Sie ihn unterdrücken, indem Sie den Interpreter mit dem Flag -B starten, zum Beispiel
Eine andere Möglichkeit ist, wie von tcaswell erwähnt, die Umgebungsvariable
PYTHONDONTWRITEBYTECODE
auf einen beliebigen Wert zu setzen (laut Python's Manpage eine beliebige "nicht leere Zeichenkette").__pycache__
ist ein Ordner, der Python 3 Bytecode enthält, der kompiliert und zur Ausführung bereit ist.Ich empfehle nicht, diese Dateien routinemäßig zu löschen oder ihre Erstellung während der Entwicklung zu unterdrücken, da dies die Leistung beeinträchtigen kann. Halten Sie einfach einen rekursiven Befehl bereit (siehe unten), um bei Bedarf aufzuräumen, da Bytecode in Grenzfällen veraltet sein kann (siehe Kommentare).
Python-Programmierer ignorieren normalerweise Bytecode. In der Tat sind
__pycache__
und*.pyc
häufig in.gitignore
Dateien zu finden. Bytecode ist nicht für die Weitergabe gedacht und kann mit demdis
Modul disassembliert werden.Wenn Sie OS X verwenden, können Sie alle diese Ordner in Ihrem Projekt einfach ausblenden, indem Sie den folgenden Befehl im Stammverzeichnis Ihres Projekts ausführen.
Ersetzen Sie
__pycache__
mit*.pyc
für Python 2.Dies setzt eine Markierung für alle diese Verzeichnisse (.pyc-Dateien), die Finder/Textmate 2 anweist, sie von der Auflistung auszuschließen. Wichtig ist, dass der Bytecode da ist, er ist nur versteckt.
Führen Sie den Befehl erneut aus, wenn Sie neue Module erstellen und neuen Bytecode verstecken wollen oder wenn Sie die versteckten Bytecode-Dateien löschen.
Unter Windows könnte der entsprechende Befehl lauten (nicht getestet, Batch-Skript erwünscht):
Das ist dasselbe wie das Ausblenden von Ordnern im Projekt mit Rechtsklick > ausblenden...
Das Ausführen von Unit-Tests ist ein Szenario (mehr dazu in den Kommentaren), bei dem das Löschen der
*.pyc
-Dateien und__pycache__
-Ordner tatsächlich nützlich ist. Ich verwende die folgenden Zeilen in meinem~/.bash_profile
und lasse einfachcl
laufen, um bei Bedarf aufzuräumen.Ab Version 3.2 speichert Python kompilierte .pyc-Bytecodedateien in einem Unterverzeichnis namens
__pycache__
, das sich in dem Verzeichnis befindet, in dem sich Ihre Quelldateien befinden, mit Dateinamen, die die Python-Version identifizieren, mit der sie erstellt wurden (z. B. script.cpython-33.pyc)