2015-03-11 10 views
43

Was ist der beste Weg, um die __pycache__ Ordner alle zu löschen und .pyc/.pyo Dateien von einem python3 Projekt. Ich habe mehrere Benutzer vorschlagen, mit Debian gebündelten das pyclean Skript gesehen, aber das entbindet nicht die Ordner. Ich möchte einen einfachen Weg, um das Projekt zu bereinigen, bevor Sie die Dateien zu meinem DVS schieben.Python3 Projekt entfernen __pycache__ Ordner und Dateien .pyc

+2

Es ist üblich, diese Dateien zur Liste der ignorierten Dateien hinzuzufügen, da sie nicht verfolgt werden sollten. – bvidal

+0

Ich habe sie bereits zur Ignorierdatei hinzugefügt, aber sie wurden noch immer nachverfolgt und ich suchte nach einer einfachen Möglichkeit, sie zu entfernen, damit sie leichter aus der Revision entfernt werden können. Was ich unten gefunden habe. – SalientGreen

Antwort

27

fand ich die Antwort selbst, wenn ich pyclean als pycclean vertippt:

No command 'pycclean' found, did you mean: 
    Command 'py3clean' from package 'python3-minimal' (main) 
    Command 'pyclean' from package 'python-minimal' (main) 
    pycclean: command not found 

Lauf py3clean . es sehr schön aufgeräumt.

+3

py3clean ist konservativer als @ V.Gamulas Befehl: Es löscht keine .pyc-Dateien, die aus Quelldateien erzeugt wurden, die seither gelöscht wurden. –

+0

Ab Mai/2017, in MacOS/Homebrew, musste ich das Paket pycleaner von pip verwenden, und der Befehl zum Ausführen ist pycleaner. Nur Python 2. –

+0

python3-minimal scheint nur auf Debian verfügbar zu sein (nicht auf RHEL, CentOS, brew, MacOS) – user12345

80

Sie können es manuell mit dem nächsten Befehl:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf 

Dies entfernt alle * .pyc Dateien und __pycache__ Verzeichnisse rekursiv im aktuellen Verzeichnis.

+8

Kommentare zu kombinieren, verwende einfach diesen Alias ​​in deinem _.bash_profile_ (oder dem entsprechenden Shell-Loader): ** 'alias pyclean = "find. -name \ *. pyc -o -name \ *. pyo -o -name __pycache__ -delete" '** – maxkoryukov

+0

Sie können die Generierung der Datei in einem Entwicklungskontext auch mit PYTHONDONTWRITEBYTECODE env verhindern https://docs.python.org/3/using/cmdline.html#envvar-PYTHONDONTWRITEBYTECODE – amjoconn

+1

Gibt es einen Grund, warum dies nicht wie erwartet auf Mac funktioniert? Es kann die Dateien in Ordnung finden, aber '-delete' scheint nichts zu tun. Insbesondere, wenn ich den "-o" verwende, um mehrere Pfade einzuschließen, löscht "-delete" nichts. Versuchen Sie auch, zuerst "-delete" zu setzen: NICHT! – dwanderson

5

Setzen Sie diese Funktion in Ihrem .bashrc Datei:

pyclean() { 
     find . -regex "\(.*__pycache__.*\|*.py[co]\)" -delete 
} 

Dann cd in das Verzeichnis möchten Sie rekursiv sauber und pyclean eingeben.

Die Top-Antwort sagt:

find . | grep -E "(__pycache__|\.pyc|\.pyo$)" | xargs rm -rf 

Dies wäre weniger effizient zu sein scheint, weil es drei Prozesse verwendet. find nimmt einen regulären Ausdruck, so dass wir nicht über einen separaten Aufruf von grep benötigen. In ähnlicher Weise hat es -delete, so dass wir keinen separaten Aufruf von rm müssen - und im Gegensatz zu einem Kommentar hier, es wird Verzeichnisse löschen, solange sie durch die regulären Ausdruck geleert bekommen. Von der xargs Manpage:

find /tmp -depth -name core -type f -delete 

Dateien finden sie genannt Kern in oder unter dem Verzeichnis/tmp und löschen, aber effizienter als im vorherigen Beispiel (weil wir vermeiden die Notwendigkeit fork (2) und exec (2) starten rm und wir brauchen nicht den zusätzlichen xargs Prozess).

4

Da dies ein Python 3-Projekt, müssen Sie nur __pycache__ Verzeichnisse löschen - alle .pyc/.pyo Dateien in ihnen sind.

find . -type d -name __pycache__ -exec rm -r {} \+ 

oder seiner einfacheren Form,

find . -type d -name __pycache__ -delete 

, die für mich nicht aus irgendeinem Grund arbeiten (Dateien wurden gelöscht, aber Verzeichnisse waren nicht), so dass ich die sowohl im Interesse der Vollständigkeit.


Alternativ, wenn Sie diese in einem Verzeichnis tun, die unter Revisionskontrolle ist, können Sie die RCS sagen __pycache__ Ordner rekursiv zu ignorieren. Dann bereinigen Sie im gewünschten Moment alle ignorierten Dateien. Dies wird wahrscheinlich bequemer sein, weil es wahrscheinlich mehr zu bereinigen gibt als nur __pycache__.

+0

Nein, nicht alle '.pyc' Dateien sind drin. –

0

Warum nicht einfach rm -rf __pycache__ verwenden? Führen Sie anschließend git add -A aus, um sie aus Ihrem Repository zu entfernen, und fügen Sie Ihrer Datei .gitignore __pycache__/ hinzu.

1

Dies ist mein Alias, der sowohl mit Python 2 als auch mit Python 3 funktioniert und alle .pyc .pyo Dateien sowie __pycache__ Verzeichnisse rekursiv löscht.

alias pyclean='find . -name "*.py[c|o]" -o -name __pycache__ -exec rm -rf {} +' 
Verwandte Themen