Подтвердить что ты не робот

Проект Python3 удаляет папки __pycache__ и .pyc

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

4b9b3361

Ответ 1

Я сам нашел ответ, когда я ошибся 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 . очень хорошо очистил его.

Ответ 2

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

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

Это приведет к удалению всех файлов *.pyc и __ pycache __ каталогов в текущем каталоге.

Ответ 3

macOS и Linux

Реализация BSD find в macOS отличается от GNU find - это совместимо как с BSD, так и с GNU find. Начните с реализации -name, используя -name и -o для или - Поместите эту функцию в ваш файл .bashrc:

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

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

GNU найти -o только

Это решение GNU find, only (то есть Linux), но мне кажется, что с регулярным выражением оно выглядит немного лучше:

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

Любая платформа, использующая Python 3

В Windows вы, вероятно, даже не find. Однако у вас, вероятно, есть Python 3, который, начиная с 3.4, имеет удобный модуль pathlib:

python3 -c "import pathlib; [p.unlink() for p in pathlib.Path('.').rglob('*.py[co]')]"
python3 -c "import pathlib; [p.rmdir() for p in pathlib.Path('.').rglob('__pycache__')]"

Это нарушает понимание списка для зацикливания, но при использовании python -c стиль является второстепенной задачей. В качестве альтернативы мы можем злоупотреблять (например) __import__:

python3 -c "for p in __import__('pathlib').Path('.').rglob('*.py[co]'): p.unlink()"
python3 -c "for p in __import__('pathlib').Path('.').rglob('__pycache__'): p.rmdir()"

Критика ответа

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

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).

Ответ 4

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

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

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

find . -type d -name __pycache__ -delete

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


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

Ответ 5

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

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

Ответ 6

Большое спасибо за другие ответы, основанные на них, это то, что я использовал для моего файла prerm пакета Debian:

#!/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

Ответ 7

Если вам нужно постоянное решение для хранения файлов кэша Python вне каталогов вашего проекта:

Начиная с Python 3.8 вы можете использовать переменную среды PYTHONPYCACHEPREFIX для определения каталога кэша для Python.

Из документов Python:

Если это установлено, Python будет записывать файлы .pyc в зеркальное дерево каталогов по этому пути, а не в каталоги pycache внутри дерева исходных текстов. Это эквивалентно указанию опции -X pycache_prefix = PATH.

Пример

Если вы добавите следующую строку в ./profile в Linux:

export PYTHONPYCACHEPREFIX="$HOME/.cache/cpython/"

Python не будет создавать раздражающие каталоги __pycache__ в каталоге вашего проекта, вместо этого он поместит их все в ~/.cache/cpython/

Ответ 8

Использование PyCharm

Чтобы удалить Python скомпилированные файлы

  1. В окне Project Tool Window щелкните правой кнопкой мыши проект или каталог, из которого следует удалить скомпилированные файлы Python.

  2. В контекстном меню выберите " Clean Python compiled files.

Файлы .pyc находящиеся в выбранном каталоге, автоматически удаляются.

Ответ 9

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

Ответ 10

Просто зайдите в свой терминал и введите:

$rm __pycache__

и он будет удален.