.pyc-Dateien werden generiert, wenn die entsprechenden Codeelemente importiert werden, und aktualisiert, wenn die entsprechenden Code-Dateien aktualisiert wurden. Wenn die .pyc-Dateien gelöscht werden, werden sie automatisch neu generiert. Sie werden jedoch nicht automatisch gelöscht, wenn die entsprechenden Codedateien gelöscht werden.
Dies kann einige wirklich lustige Fehler bei Refactors auf Dateiebene verursachen.
Zuallererst können Sie Code pushen, der nur auf Ihrem Computer und auf keinem anderen funktioniert. Wenn Sie Verweise auf gelöschte Dateien haben, funktionieren diese weiterhin lokal, wenn Sie die relevanten .pyc-Dateien nicht manuell löschen, da .pyc-Dateien beim Import verwendet werden können. Dies wird durch die Tatsache verstärkt, dass ein ordnungsgemäß konfiguriertes Versionskontrollsystem nur .py-Dateien in das zentrale Repository überträgt, nicht .pyc-Dateien, was bedeutet, dass Ihr Code den "Importtest" bestehen kann (funktioniert alles in Ordnung), einwandfrei und nicht Arbeit auf dem Computer eines anderen.
Zweitens können einige ziemlich schreckliche Fehler auftreten, wenn Sie Pakete in Module verwandeln. Wenn Sie ein Paket (einen Ordner mit einer __init__.py
Datei) in ein Modul (eine .py-Datei) konvertieren, bleiben die .pyc-Dateien erhalten, die dieses Paket einmal dargestellt haben. Insbesondere die __init__.pyc
Überreste. Wenn Sie also das Paket foo mit einem Code haben, der keine Rolle spielt, löschen Sie das Paket später und erstellen Sie eine Datei foo.py mit einer Funktion def bar(): pass
und führen Sie Folgendes aus:
from foo import bar
du erhältst:
ImportError: cannot import name bar
weil Python immer noch die alten .pyc-Dateien aus dem foo-Paket verwendet, von denen keine die Leiste definiert. Dies kann besonders auf einem Webserver problematisch sein, auf dem vollständig funktionierender Code aufgrund von .pyc-Dateien beschädigt werden kann.
Aus diesen beiden Gründen (und möglicherweise aus anderen Gründen) sollten Ihr Bereitstellungscode und Ihr Testcode .pyc-Dateien löschen, z. B. mit der folgenden Bash-Zeile:
find . -name '*.pyc' -delete
-B
Ab Python 2.6 können Sie Python auch mit dem Flag ausführen, um keine .pyc-Dateien zu verwenden. Siehe So vermeiden Sie .pyc-Dateien für mehr Details.
Siehe auch: Wie entferne ich alle .pyc-Dateien aus einem Projekt?
rm *.pyc
. Dadurch werden keine .pyc-Dateien in verschachtelten Ordnern gelöscht. Verwenden Siefind . -name '*.pyc' -delete
stattdessen