¿Cuál es la MEJOR manera de borrar todas las __pycache__
carpetas y .pyc/.pyo
archivos de un proyecto python3? He visto a varios usuarios sugerir el pyclean
script incluido con Debian, pero esto no elimina las carpetas. Quiero una forma simple de limpiar el proyecto antes de enviar los archivos a mi DVS.
python
python-3.x
python-3.4
delete-file
SalientGreen
fuente
fuente
*__pycache__
,*.pyc*
y no distingue entre archivos y directorios. La mayoría de losrm
comandos generados también serán superfluos.find
nigrep
norrm
y podría ser peligroso para cualquier directorio de trabajo actual que pueda conteneruseful.pycle.json
oimportant_deployment_setting_about__pycache__.txt
etc. Lo que no descartaría en toda la base de usuarios de SO. Sin mencionar cuán (peligrosamenterm -rf
) rotoxargs
sería un archivo con espacios en blanco en el nombre. Así que logrep: parentheses not balanced
Encontré la respuesta cuando escribí mal Pyclean como Pycclean:
Correr lo
py3clean .
limpió muy bien.fuente
__pycache__
carpetas ni.pyc
archivos (probado en debian)macOS y Linux
La
find
implementación de BSD en macOS es diferente de GNU find: esto es compatible con BSD y GNU find. Comience con una implementación global, usando-name
y-o
para o - Ponga esta función en su.bashrc
archivo:Luego,
cd
al directorio que desea limpiar de forma recursiva, y escribapyclean
.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:
Cualquier plataforma, usando Python 3
En Windows, probablemente ni siquiera tienes
find
. Sin embargo, probablemente tenga Python 3, que a partir de 3.4 tiene elpathlib
módulo conveniente :La
-B
bandera le dice a Python que no escriba.pyc
archivos. (Ver también elPYTHONDONTWRITEBYTECODE
variable de entorno).Los abusos anteriores enumeran las comprensiones para el bucle, pero cuando se usa
python -c
, el estilo es más bien una preocupación secundaria. Alternativamente, podríamos abusar (por ejemplo)__import__
:Crítica de una respuesta
La respuesta principal solía decir:
Esto parece ser menos eficiente porque utiliza tres procesos.
find
toma una expresión regular, por lo que no necesitamos una invocación separada degrep
. Del mismo modo, lo ha hecho-delete
, por lo que no necesitamos una invocación por separado de,rm
y al contrario de un comentario aquí, lo hará eliminar directorios no vacíos tanto tiempo a medida que se vacían en virtud de la coincidencia de expresiones regulares.Desde la
xargs
página del manual:fuente
shutil.rmtee
los__pycache__
directorios en lugar de vaciarlos primero; una frase podría ser buena para un alias fácil. SinPath
embargo, soy un gran admirador en este momento, así que creo que usaré esa versión en mi script.Dado que este es un proyecto de Python 3, solo necesita eliminar
__pycache__
directorios: todos los archivos.pyc
/.pyo
están dentro de ellos.o su forma más simple,
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 las
__pycache__
carpetas de forma 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__
.fuente
.pyc
archivos están dentro.Directory not empty
con la segunda variante aquí?Este es mi alias que funciona tanto con Python 2 como con Python 3 eliminando todos los
.pyc .pyo
archivos y__pycache__
directorios de forma recursiva.fuente
Si necesitas una solución permanente para mantener los archivos de caché de Python fuera de los directorios de su proyecto:
A partir de Python 3.8 , puede usar la variable de entorno
PYTHONPYCACHEPREFIX
para definir un directorio de caché para Python.De los documentos de Python:
Ejemplo
Si agrega la siguiente línea a su
./profile
en Linux:Python no creará los
__pycache__
directorios molestos en el directorio de su proyecto, sino que los colocará a todos en~/.cache/cpython/
fuente
El comando que he usado:
find . -type d -name "__pycache__" -exec rm -r {} +
Explica:
Primero encuentra todas las
__pycache__
carpetas en el directorio actual.Ejecute
rm -r {} +
para eliminar cada carpeta en el paso anterior ({}
indique el marcador de posición y+
finalice el comando)Editado 1:
Estoy usando Linux, para reutilizar el comando, agregué la siguiente línea al
~/.bashrc
archivoEditado 2: si está utilizando VS Code , no necesita eliminarlo
__pycache__
manualmente. Puede agregar el fragmento a continuación alsettings.json
archivo. Después de eso, VS Code ocultará todas las__pycache__
carpetas por ustedEspero eso ayude !!!
fuente
Usando PyCharm
Para eliminar archivos compilados de Python
En el
Project Tool Window
, haga clic con el botón derecho en un proyecto o directorio, donde se deben eliminar los archivos compilados de Python.En el menú contextual, elija
Clean Python compiled files
.Los
.pyc
archivos que residen en el directorio seleccionado se eliminan silenciosamente.fuente
Desde el directorio del proyecto, escriba lo siguiente:
Eliminar todos los archivos .pyc
find . -path "*/*.pyc" -delete
Eliminar todos los archivos .pyo :
find . -path "*/*.pyo" -delete
Finalmente, para eliminar todo '__pycache__' , escriba:
find . -path "*/__pycache__" -type d -exec rm -r {} ';'
Si encuentra un error de permiso denegado , agregue sudo al comienzo de todos los comandos anteriores.
fuente
Muchas gracias por las otras respuestas, en base a ellas, esto es lo que utilicé para el
prerm
archivo de mi paquete Debian :fuente
¿Por qué no solo usar
rm -rf __pycache__
? Ejecutegit add -A
después para eliminarlos de su repositorio y agregarlos__pycache__/
a su archivo .gitignore.fuente
Simplemente vaya a su terminal y luego escriba:
y será eliminado
fuente