Проект Python3 удаляет папки pycache и.файлы pyc


каков наилучший способ очистить все __pycache__ папки и .pyc/.pyo файлы из проекта python3. Я видел, как несколько пользователей предлагают pyclean скрипт в комплекте с Debian, но это не удаляет папки. Я хочу простой способ очистить проект, прежде чем нажимать файлы на мои DVS.

7 59

7 ответов:

вы можете сделать это вручную с помощью следующей команды:

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

это удалит все *.pyc файлы и __pycache__ каталоги рекурсивно в текущем каталоге.

Я сам нашел ответ, когда я ошибся pyclean как pycclean:

    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

под управлением py3clean . очистил его очень красиво.

Я думаю, что это превосходит верхний ответ-поместите эту функцию в свой .bashrc file:

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

затем cd в каталог, который вы хотите рекурсивно очистить, и введите pyclean.

критика верхнего ответа

верхний ответ говорит:

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

это казалось бы менее эффективным, потому что он использует три процесса. find принимает регулярное выражение, поэтому нам не нужен отдельный вызов grep. Точно так же -delete, так что нам не нужен отдельный вызов rm - и вопреки комментарию здесь, это будет удалить непустые каталоги, пока они опустошаются в силу соответствия регулярных выражений.

С xargs на странице:

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

найдите файлы с именем core в каталоге /tmp или ниже и удалите их, но более эффективно, чем в предыдущем примере (потому что мы избегаем необходимость использования fork (2) и exec (2) для запуска rm и нам не нужно дополнительный процесс xargs).

так как это проект Python 3, вам нужно только удалить __pycache__ справочники -- все .pyc/.pyo файлы внутри них.

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

или его более простая форма,

find . -type d -name __pycache__ -delete

который по какой-то причине не работал для меня (файлы были удалены, но каталоги не были), поэтому я включаю оба для полноты картины.


кроме того, если вы делаете это в каталоге, который находится под контролем версий, вы можете сказать RCS игнорировать __pycache__ папки рекурсивно. Затем, в нужный момент, просто очистите все игнорируемые файлы. Это, вероятно, будет более удобно, потому что там, вероятно, будет больше, чтобы очистить, чем просто __pycache__.

Это мой псевдоним, который работает как с Python 2, так и с Python 3, удаляя все .pyc .pyo файлы __pycache__ каталоги рекурсивно.

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

большое спасибо за другие ответы, на их основе это то, что я использовал для моего пакета в Debian!--1-- > file:

#!/bin/sh
set -e

deb_package='package-name'
python_package='package_name'

if which pyclean >/dev/null 2>&1; then
    py3clean -p $deb_package
else
    dpkg -L $deb_package | grep ${python_package}$ | while read file
    do
        find ${file} -type d -name __pycache__ -exec rm -r {} \+
    done
fi

почему бы просто не использовать rm -rf __pycache__? Беги git add -A после этого удалить их из репозитория и добавить __pycache__/ в свой .файла.gitignore