txt remove delete python python-3.x python-3.4 delete-file

remove - Proyecto Python3 eliminar carpetas__pycache__ y archivos.pyc



python rename file (10)

Usando PyCharm

Para eliminar archivos compilados de Python

  1. En la Project Tool Window del Project Tool Window , haga clic con el botón derecho en un proyecto o directorio, desde donde se deben eliminar los archivos compilados de Python.

  2. En el menú contextual, elija Clean Python compiled files .

Los archivos .pyc que residen en el directorio seleccionado se eliminan silenciosamente.

¿Cuál es la MEJOR manera de borrar todas las carpetas __pycache__ y .pyc/.pyo de un proyecto python3? He visto a varios usuarios sugerir el script pyclean incluido en Debian, pero esto no elimina las carpetas. Quiero una forma sencilla de limpiar el proyecto antes de enviar los archivos a mi DVS.


macOS y Linux

La implementación de find de BSD en macOS es diferente de la búsqueda de GNU: esto es compatible con la búsqueda de BSD y GNU. Comience con una implementación global, usando -name y -o para o - Ponga esta función en su archivo .bashrc :

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

Luego cd al directorio que desea limpiar de forma recursiva y escriba pyclean .

GNU solo de búsqueda

Esta es una solución de GNU find, only (es decir, Linux), pero creo que es un poco más agradable con la expresión regular:

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

Cualquier plataforma, usando Python 3

En Windows, probablemente ni siquiera tenga find . Sin embargo, probablemente tenga Python 3, que a partir de 3.4 tiene el conveniente módulo 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__'')]"

Esto abusa de la lista de comprensiones para bucles, pero cuando se usa python -c , el estilo es más bien una preocupación secundaria. Alternativamente, podríamos abusar (por ejemplo) __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()"

Crítica de una respuesta

La respuesta principal solía decir:

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

Esto parece ser menos eficiente porque utiliza tres procesos. find toma una expresión regular, por lo que no necesitamos una invocación separada de grep . Del mismo modo, tiene -delete , por lo que no necesitamos una invocación separada de rm y al contrario de un comentario aquí, eliminará los directorios no vacíos siempre que se vacíen en virtud de la coincidencia de expresión regular.

Desde la página de manual de xargs :

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

Busque archivos llamados core en o debajo del directorio / tmp y elimínelos, pero de manera más eficiente que en el ejemplo anterior (porque evitamos la necesidad de usar fork (2) y exec (2) para iniciar rm y no necesitamos el proceso de xargs extra).


¿Por qué no usar simplemente rm -rf __pycache__ ? Ejecute git add -A después para eliminarlos de su repositorio y agregar __pycache__/ a su archivo .gitignore.


Dado que este es un proyecto de Python 3, solo necesita eliminar los directorios __pycache__ ; todos los .pyc .pyo / .pyo están dentro de ellos.

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

o su forma más simple,

find . -type d -name __pycache__ -delete

que no funcionó para mí por alguna razón (los archivos se eliminaron pero los directorios no), por lo que incluyo ambos por completo.

Alternativamente, si está haciendo esto en un directorio que está bajo control de revisión, puede decirle al RCS que ignore __pycache__ carpetas __pycache__ recursiva. Luego, en el momento requerido, simplemente limpie todos los archivos ignorados. Esto probablemente será más conveniente porque probablemente habrá más para limpiar que solo __pycache__ .


Encontré la respuesta cuando escribí mal Pyclean como 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

Ejecutando py3clean . Lo limpió muy bien.


Este es mi alias que funciona tanto con Python 2 como con Python 3 eliminando todos los .pyc .pyo __pycache__ así como directorios __pycache__ recursiva.

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


Muchas gracias por las otras respuestas, en base a ellas, esto es lo que utilicé para el archivo prerm mi paquete 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


Puedes hacerlo manualmente con el siguiente comando:

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

Esto eliminará todos los archivos * .pyc y directorios __pycache__ de forma recursiva en el directorio actual.


Si necesita una solución permanente para mantener los archivos de caché de Python fuera de los directorios de su proyecto:

Comenzando con Python 3.8 , puede usar la variable de entorno PYTHONPYCACHEPREFIX para definir un directorio de caché para Python.

De los documentos de Python:

Si esto está configurado, Python escribirá archivos .pyc en un árbol de directorios espejo en esta ruta, en lugar de en directorios de pycache dentro del árbol de origen. Esto es equivalente a especificar la opción -X pycache_prefix = PATH.

Ejemplo

Si agrega la siguiente línea a su ./profile en Linux:

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

Python no creará los molestos directorios __pycache__ en el directorio de su proyecto, sino que los colocará a todos en ~/.cache/cpython/


Simplemente vaya a su terminal y luego escriba:

$rm __pycache__

y será eliminado