743 Stimmen

Wie kann ich alle .pyc-Dateien aus einem Projekt entfernen?

Ich habe einige Dateien in einem ziemlich großen Projekt umbenannt und möchte die .pyc-Dateien entfernen, die sie hinterlassen haben. Ich habe das Bash-Skript ausprobiert:

 rm -r *.pyc

Aber das führt nicht zu einer Rekursion durch die Ordner, wie ich dachte. Was mache ich falsch?

12 Stimmen

Das funktioniert nicht, weil Globs unter UNIX von der Shell expandiert werden, nicht von dem Programm, das gerade ausgeführt wird. Wenn Sie a.pyc und b.pyc im aktuellen Verzeichnis haben, und die Verzeichnisse foo und bar, rm wird mit den Argumenten [-r, a.pyc, b.pyc] aufgerufen.

2 Stimmen

Wenn Sie sich Sorgen machen, dass Ihr Code an andere weitergegeben wird, können Sie ihn einfach in die .gitignore-Datei aufnehmen **/*.pyc dann müssen Sie sich nicht mehr darum kümmern

1292voto

Bill the Lizard Punkte 384619
find . -name "*.pyc" -exec rm -f {} \;

0 Stimmen

Ich habe beide getestet. Die Verzeichnisse waren wahrscheinlich zu klein, um signifikant zu sein, aber dies kam schneller als meine, das ist, was ich erwartet, da meine hat, um die Liste zusammenzustellen und dann durch sie zu iterieren, während Ihre entfernt jedes Element, wie es gefunden wird.

442 Stimmen

Find hat eine eingebaute "-delete"-Aktion, so dass Sie einfach Folgendes tun können find . -name \*.pyc -delete

59 Stimmen

Am wichtigsten ist, dass Sie, wenn es sich um einen Entwicklungsrechner handelt, PYTHONDONTWRITEBYTECODE=True setzen können und dies nie wieder tun müssen. Siehe: diese Antwort .

1072voto

Andy Baker Punkte 20369

find . -name '*.pyc' -delete

Sicherlich das Einfachste.

23 Stimmen

Wenn Ihre Version von find unterstützt -delete ; es ist nicht Teil des POSIX-Standards.

4 Stimmen

Dies ignoriert .pyo-Dateien und __pycache__ Verzeichnisse. Siehe meine Antwort.

0 Stimmen

Ich habe den Code aus der akzeptierten Antwort verwendet und es hat funktioniert, aber diese Befehle sind kürzer und einfacher

97voto

Wilfred Hughes Punkte 27613

Hinzufügen zu Ihrem ~/.bashrc :

pyclean () {
        find . -type f -name "*.py[co]" -delete
        find . -type d -name "__pycache__" -delete
}

Dadurch werden alle .pyc- und .pyo-Dateien entfernt, und __pycache__ Verzeichnisse. Außerdem ist es sehr schnell.

Die Verwendung ist einfach:

$ cd /path/to/directory
$ pyclean

0 Stimmen

find . -type d -name "__pycache__" -delete gibt oft eine Warnung über einen fehlenden Pfad aus, da der Inhalt offenbar der Warteschlange hinzugefügt wird, bevor der Ordner gelöscht wird. 2>/dev/null sollte das beheben.

89voto

jb. Punkte 21920

In der aktuellen Version von Debian haben Sie pyclean Skript, das sich in python-minimal Paket.

Die Verwendung ist einfach:

pyclean .

36 Stimmen

Es ist erwähnenswert, dass pyclean nur .pyc-Dateien zu löschen scheint, für die es eine entsprechende .py-Datei gibt (zumindest auf meinem System - Ubuntu 12.10.) Das bedeutet, dass es in Situationen, in denen eine Quelldatei gelöscht wurde und man die übrig gebliebenen .pyc-Dateien bereinigen möchte, nicht sehr hilfreich ist.

1 Stimmen

@holms pyclean (und jetzt py3clean ) stammen aus einem Debian-Paket und sind daher nicht in RHEL enthalten.

2 Stimmen

El pyclean ist jetzt als Python-Paket verfügbar installierbar von PyPI , die plattformübergreifend funktionieren (einschließlich RHEL, macOS und Windows). Es löscht alle .pyc Datei ohne besondere Präferenz ab heute.

53voto

d0k Punkte 2565

Wenn Sie bash >=4.0 (oder zsh) verwenden

rm **/*.pyc

Beachten Sie, dass */*.pyc wählt alle .pyc Dateien in den unmittelbaren Unterverzeichnissen der ersten Ebene, während **/*.pyc durchsucht rekursiv den gesamten Verzeichnisbaum. Ein Beispiel, foo/bar/qux.pyc wird gelöscht durch rm **/*.pyc aber nicht von */*.pyc .

Die globstar-Shell-Optionen müssen aktiviert sein. Zum Aktivieren globstar :

shopt -s globstar

und seinen Status zu überprüfen:

shopt globstar

1 Stimmen

Was ist der Unterschied beim Laufen rm **/*.pyc gegen rm */*.pyc ? (Letzteres schien bei mir vor Ort zu funktionieren.)

1 Stimmen

@TaylorEdmiston rm */*.pyc löscht alle .pyc Dateien in allen Unterverzeichnissen der Tiefe 1. rm **/*.pyc löscht alle .pyc Dateien in allen Unterverzeichnissen der Tiefe 0+

1 Stimmen

@AdamStewart Vielen Dank für diesen Hinweis. Für andere, die über diesen Thread stolpern: Das Problem, das ich hatte, war, dass Apples Bash, die mit OS X ausgeliefert wird, kein globstar enthält (also ** fungiert als * wenn sie stattdessen ausgeführt werden und shopt globstar löst einen Fehler aus).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X