2013-07-23 3 views
7

Вызов вызов setup из setuptools с версии 0.9.6 можно выполнить следующую команду:Что конкретно делает setup.py clean?

python setup.py clean 

Но что это именно делать? Помощь по этой команде немного скудна, и работает

python setup.py clean --all 

дает бесполезные заявления как

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

Есть ли возможность использовать эту clean команды, например, cleanup автоматически временные файлы python, заканчивающиеся на .pyc и .~? Это можно сделать с помощью этой команды, нужно ли ее настроить, ...?

+0

Из интереса, почему вы хотите дополнительного поведения? Я могу представить, что приятно иметь чистый каталог, но это не то, о чем вам следует беспокоиться в целом. Любая конкретная причина? – Evert

+0

Мне нужно дополнительное поведение, чтобы указать просто каталог, из которого весь контент взят в пакет. Не удаляя сначала временные файлы python, все эти временные файлы будут использоваться в упаковке, нет? Кроме того, команда 'clean' может использоваться, чтобы просто очистить рабочий каталог от временных файлов, чтобы четко видеть, что у вас есть. – Alex

+0

Для упаковки изучите использование 'setup.py sdist'. Что касается очистки: '* .pyc' файлы не должны быть проблемой, но вы можете рассмотреть' find. -name "* .pyc" | xargs rm'. Эти '* ~' файлы не являются чем-то вроде Python, потому что они не связаны с Python (это может произойти и для нескольких других типов файлов). – Evert

ответ

6

Насколько я знаю, он просто удаляет подкаталог build, где Python ставит все файлы для установки, включая расширения, которые необходимо скомпилировать.

Не должно быть никаких файлов *.pyc в других местах, если только вы не запустили Python на некоторых сценариях в исходном каталоге (что может произойти, если вы запускаете тесты) или импортировали модули непосредственно из исходного каталога. *~ файлы являются резервными файлами emacs и, таким образом, не будут очищены setup.py в любом случае. (Если вы видели это поведение от make clean, чем просто потому, что кто-то закодированы, что в Makefile.)

Вы, вероятно, может переопределить чистую команду таким образом, чтобы (рекурсивно) удалить *.pyc файлы, но я сомневаюсь, что есть нужда. В общем, Python достаточно умен, чтобы перекомпилировать файлы *.py в файлы *.pyc, если первые изменились, и в противном случае использование последнего будет просто быстрее.

Существует одна оговорка, с которой я столкнулся, и именно тогда, когда вы делаете setup.py build_ext --inplace, очистка не удалит скомпилированные модули, так как они не находятся в каталоге сборки. Который мне кажется недостатком чистой команды.

В целом, похоже, что команда clean была добавлена ​​в соответствие с поведением make, но, похоже, она не добавляет многого.

+1

См. Другой комментарий: Когда я создаю пакет, я хочу сначала избавиться от временных файлов. Я не хочу, чтобы они были частью пакета. – Alex

+0

Если я использовал 'setup.py build_ext --inplace', есть ли способ удалить все скомпилированные модули? – Garrett

+2

@Garrett Если это только чистые модули Python, вы можете использовать предложение (mofidied) find в комментариях к вопросу: 'find -name '* pyc" -delete'. Если есть другие файлы (скомпилированные из исходных файлов Cython или C), все выглядит более грубо, и вы можете попробовать запустить команду find для каждого типа файла. – Evert

Смежные вопросы