2013-07-23 13 views
7

0.9.6 einen Aufruf an setup von setuptools mit Version aufrufen kann ich den folgenden Befehl ausführen:Was genau macht "setup.py clean"?

python setup.py clean 

Aber was tut man das genau? Die Hilfe zu diesem Befehl ist etwas spärlich, und läuft

python setup.py clean --all 

nutzlose Aussagen wie

'build/lib.linux-i686-2.7' does not exist -- can't clean it 

gibt Gibt es eine Möglichkeit, diesen clean Befehl zu verwenden, um z.B. Bereinigung automatisch temporäre Python-Dateien mit der Endung .pyc und .~? Kann das mit diesem Befehl gemacht werden, muss es konfiguriert werden, ...?

+0

Aus Interesse, warum möchten Sie das zusätzliche Verhalten? Ich kann mir vorstellen, dass es sich gut anfühlt, ein sauberes Verzeichnis zu haben, aber es ist nichts, worüber man sich insgesamt ärgern sollte. Irgendein bestimmter Grund? – Evert

+0

Ich möchte das extra Verhalten, um einfach ein Verzeichnis anzugeben, aus dem der gesamte Inhalt in das Paket übernommen wird. Ohne temporäre Python-Dateien zuerst zu entfernen, werden alle diese temporären Dateien in der Verpackung verwendet, nein? Mit dem 'clean'-Befehl können Sie das Arbeitsverzeichnis auch einfach von temporären Dateien löschen, um klar zu sehen, was Sie haben. – Alex

+0

Für die Verpackung schauen Sie sich 'setup.py sdist' an. Zum Aufräumen: '* .pyc' Dateien sollten eigentlich kein Problem sein, aber man könnte' finden. -name "* .pyc" | xargs rm'. Diese '* ~' Dateien sind nicht etwas, mit dem Python beschäftigt sein sollte, da diese nichts mit Python zu tun haben (dies könnte auch für einige andere Dateitypen gelten). – Evert

Antwort

6

Soweit ich weiß, wird nur das Unterverzeichnis build entfernt, in dem Python alle zu installierenden Dateien einschließlich der Erweiterungen, die kompiliert werden müssen, einfügt.

Es sollte keine *.pyc Dateien an anderer Stelle geben, außer Sie haben Python auf einigen Skripten im Quellverzeichnis ausgeführt (was passieren kann, wenn Sie Tests ausführen), oder importierte Module direkt aus dem Quellverzeichnis. *~ Dateien sind Emacs Backup-Dateien, und würde daher nicht von setup.py sowieso bereinigt werden. (Wenn Sie dieses Verhalten von make clean gesehen haben, als das ist, nur weil jemand, der in der Datei Makefile codiert.)

Sie könnten wahrscheinlich den Befehl clean in einer Art und Weise überschreiben, um (rekursiv) entfernen *.pyc Dateien, aber ich bezweifle, ob es ein Bedürfnis. Im Allgemeinen ist Python schlau genug, *.py Dateien in *.pyc Dateien zu rekompilieren, wenn sich die ersten geändert haben, sonst wird die Verwendung von letzterem einfach schneller sein.

Es gibt einen Vorbehalt, den ich kenne, und das ist, wenn eine setup.py build_ext --inplace tut, Reinigung wird nicht das kompilierte Modul (s) entfernen, da diese nicht im Build-Verzeichnis sind. Was für mich wie ein Mangel des sauberen Befehls ist.

Insgesamt sieht es so aus, als ob der Befehl clean hinzugefügt wurde, um dem Verhalten von make zu entsprechen, aber es scheint nicht viel hinzuzufügen.

+1

Bitte sehen Sie anderen Kommentar: Wenn ich ein Paket erstellen, möchte ich temporäre Dateien zuerst loswerden. Ich möchte nicht, dass sie Teil des Pakets sind. – Alex

+0

Wenn ich 'setup.py build_ext --inplace' verwendet habe, gibt es eine Möglichkeit, alle kompilierten Module zu entfernen? – Garrett

+2

@Garrett Wenn dies nur reine Python-Module sind, könnten Sie den (mofidied) Suchvorschlag in den Kommentaren zu der Frage verwenden: 'find -name" * pyc "-delete'. Wenn es andere Dateien gibt (kompiliert aus Cython- oder C-Quelldateien), sind die Dinge haariger und Sie können versuchen, den Befehl find für jeden Dateityp auszuführen. – Evert