Was ist der BESTE Weg, um alle __pycache__
Ordner und .pyc/.pyo
Dateien aus einem Python3-Projekt zu löschen ? Ich habe mehrere Benutzer gesehen, die pyclean
das mit Debian gebündelte Skript vorgeschlagen haben, aber dadurch werden die Ordner nicht entfernt. Ich möchte eine einfache Möglichkeit, das Projekt zu bereinigen, bevor die Dateien auf meinen DVS übertragen werden.
python
python-3.x
python-3.4
delete-file
SalientGreen
quelle
quelle
*__pycache__
,*.pyc*
und es unterscheidet nicht zwischen Dateien und Verzeichnissen. Die meisten generiertenrm
Befehle sind ebenfalls überflüssig.find
noch ,grep
noch ,rm
und es könnte für alle aktuellen Arbeitsverzeichnis gefährlich sein, enthalten könntenuseful.pycle.json
oderimportant_deployment_setting_about__pycache__.txt
usw. Was ich würde nicht ausschließen, auf der gesamten Nutzerbasis von SO. Ganz zu schweigen davon, wie (gefährlichrm -rf
) kaputtxargs
eine Datei mit Leerzeichen im Namen wäre. Also habe ich es bearbeitet ...grep: parentheses not balanced
Ich habe die Antwort selbst gefunden, als ich pyclean als pycclean verwechselt habe:
Laufen
py3clean .
hat es sehr schön aufgeräumt.quelle
__pycache__
Ordner noch.pyc
Dateien (aufmacOS & Linux
Die
find
Implementierung von BSD unter macOS unterscheidet sich von GNU find - dies ist sowohl mit BSD als auch mit GNU find kompatibel. Beginnen Sie mit einer Globbing-Implementierung, verwenden Sie-name
und-o
for oder - Fügen Sie diese Funktion in Ihre.bashrc
Datei ein:Gehen
cd
Sie dann zu dem Verzeichnis, das Sie rekursiv bereinigen möchten, und geben Sie einpyclean
.GNU nur find
Dies ist eine GNU-Find-Only-Lösung (dh Linux), aber ich finde, dass sie mit dem regulären Ausdruck etwas besser ist:
Jede Plattform mit Python 3
Unter Windows haben Sie wahrscheinlich nicht einmal
find
. Sie haben jedoch wahrscheinlich Python 3, das ab 3.4 das praktischepathlib
Modul hat:Das
-B
Flag weist Python an, keine.pyc
Dateien zu schreiben . (Siehe auch diePYTHONDONTWRITEBYTECODE
Umgebungsvariable.)Die obigen Missbräuche missbrauchen Listenverständnisse für Schleifen, aber bei der Verwendung
python -c
ist Stil eher ein zweitrangiges Anliegen. Alternativ könnten wir (zum Beispiel) missbrauchen__import__
:Kritik einer Antwort
Die beste Antwort lautete:
Dies scheint weniger effizient zu sein, da drei Prozesse verwendet werden.
find
nimmt einen regulären Ausdruck, daher benötigen wir keinen separaten Aufruf vongrep
. In ähnlicher Weise hat es-delete
, so dass wir keinen separaten Aufruf von benötigenrm
- und im Gegensatz zu einem Kommentar hier werden nicht leere Verzeichnisse gelöscht, solange sie aufgrund der Übereinstimmung mit regulären Ausdrücken geleert werden.Von der
xargs
Manpage:quelle
shutil.rmtee
in den__pycache__
Verzeichnissen verwenden, anstatt sie zuerst zu leeren. Ein Einzeiler könnte für einen einfachen Alias nützlich sein. Ich bin momentan ein großer Fan vonPath
, daher denke ich, dass ich diese Version in meinem Skript verwenden werde.Da dies ein Python 3-Projekt ist, müssen Sie nur
__pycache__
Verzeichnisse löschen - alle.pyc
/.pyo
Dateien befinden sich darin.oder seine einfachere Form,
Das hat aus irgendeinem Grund bei mir nicht funktioniert (Dateien wurden gelöscht, Verzeichnisse jedoch nicht). Der Vollständigkeit halber füge ich beide hinzu.
Wenn Sie dies in einem Verzeichnis tun, das der Versionskontrolle unterliegt, können Sie dem RCS alternativ anweisen,
__pycache__
Ordner rekursiv zu ignorieren . Bereinigen Sie dann zum gewünschten Zeitpunkt einfach alle ignorierten Dateien. Dies wird wahrscheinlich bequemer sein, da es wahrscheinlich mehr zu bereinigen gibt als nur__pycache__
.quelle
.pyc
Dateien befinden sich darin.Directory not empty
der hier mit der zweiten Variante kommt?Dies ist mein Alias, der sowohl mit Python 2 als auch mit Python 3 funktioniert und alle
.pyc .pyo
Dateien sowie__pycache__
Verzeichnisse rekursiv entfernt.quelle
Wenn Sie eine dauerhafte Lösung benötigen , um Python-Cache-Dateien aus Ihren Projektverzeichnissen herauszuhalten:
Ab Python 3.8 können Sie mit der Umgebungsvariablen
PYTHONPYCACHEPREFIX
ein Cache-Verzeichnis für Python definieren.Aus den Python-Dokumenten:
Beispiel
Wenn Sie unter
./profile
Linux die folgende Zeile hinzufügen :Python erstellt nicht die nervigen
__pycache__
Verzeichnisse in Ihrem Projektverzeichnis, sondern legt sie alle ab~/.cache/cpython/
quelle
Der Befehl, den ich verwendet habe:
find . -type d -name "__pycache__" -exec rm -r {} +
Erklärt:
Findet zuerst alle
__pycache__
Ordner im aktuellen Verzeichnis.Ausführen
rm -r {} +
, um jeden Ordner im obigen Schritt zu löschen ({}
Platzhalter angeben und+
Befehl beenden)Bearbeitet 1:
Ich verwende Linux, um den Befehl wiederzuverwenden. Ich habe der
~/.bashrc
Datei die folgende Zeile hinzugefügtBearbeitet 2: Wenn Sie VS-Code verwenden , müssen Sie ihn nicht
__pycache__
manuell entfernen . Sie können das folgende Snippet zursettings.json
Datei hinzufügen . Danach versteckt VS Code alle__pycache__
Ordner für SieIch hoffe es hilft !!!
quelle
Verwenden von PyCharm
So entfernen Sie Python-kompilierte Dateien
Project Tool Window
Klicken Sie mit der rechten Maustaste auf ein Projekt oder Verzeichnis, aus dem Python-kompilierte Dateien gelöscht werden sollen.Wählen Sie im Kontextmenü
Clean Python compiled files
.Die
.pyc
im ausgewählten Verzeichnis befindlichen Dateien werden stillschweigend gelöscht.quelle
Geben Sie im Projektverzeichnis Folgendes ein:
Alle .pyc- Dateien löschen
find . -path "*/*.pyc" -delete
Alle .pyo- Dateien löschen :
find . -path "*/*.pyo" -delete
Um alle '__pycache__' zu löschen , geben Sie Folgendes ein :
find . -path "*/__pycache__" -type d -exec rm -r {} ';'
Wenn Sie feststellen, dass die Berechtigung verweigert wurde , fügen Sie sudo zu Beginn aller oben genannten Befehle hinzu.
quelle
Vielen Dank für die anderen Antworten. Basierend darauf habe ich Folgendes für die
prerm
Datei meines Debian-Pakets verwendet:quelle
Warum nicht einfach benutzen
rm -rf __pycache__
? Führen Siegit add -A
anschließend aus, um sie aus Ihrem Repository zu entfernen und__pycache__/
Ihrer .gitignore-Datei hinzuzufügen .quelle
Bitte gehen Sie einfach zu Ihrem Terminal und geben Sie Folgendes ein:
und es wird entfernt.
quelle