remove - Proyecto Python3 eliminar carpetas__pycache__ y archivos.pyc
python rename file (10)
Usando PyCharm
Para eliminar archivos compilados de Python
-
En la
Project Tool Window
delProject Tool Window
, haga clic con el botón derecho en un proyecto o directorio, desde donde se deben eliminar los archivos compilados de Python. -
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