¿Cuál es la MEJOR manera de borrar todas las __pycache__ carpetas y .pyc/.pyoarchivos de un proyecto python3? He visto a varios usuarios sugerir el pycleanscript 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 losrmcomandos generados también serán superfluos.findnigrepnorrmy podría ser peligroso para cualquier directorio de trabajo actual que pueda conteneruseful.pycle.jsonoimportant_deployment_setting_about__pycache__.txtetc. Lo que no descartaría en toda la base de usuarios de SO. Sin mencionar cuán (peligrosamenterm -rf) rotoxargssería un archivo con espacios en blanco en el nombre. Así que logrep: parentheses not balancedEncontré la respuesta cuando escribí mal Pyclean como Pycclean:
Correr lo
py3clean .limpió muy bien.fuente
__pycache__carpetas ni.pycarchivos (probado en debian)macOS y Linux
La
findimplementació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-namey-opara o - Ponga esta función en su.bashrcarchivo:Luego,
cdal 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 elpathlibmódulo conveniente :La
-Bbandera le dice a Python que no escriba.pycarchivos. (Ver también elPYTHONDONTWRITEBYTECODEvariable 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.
findtoma 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,rmy 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
xargspágina del manual:fuente
shutil.rmteelos__pycache__directorios en lugar de vaciarlos primero; una frase podría ser buena para un alias fácil. SinPathembargo, 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/.pyoestá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
.pycarchivos están dentro.Directory not emptycon la segunda variante aquí?Este es mi alias que funciona tanto con Python 2 como con Python 3 eliminando todos los
.pyc .pyoarchivos 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
PYTHONPYCACHEPREFIXpara definir un directorio de caché para Python.De los documentos de Python:
Ejemplo
Si agrega la siguiente línea a su
./profileen 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
~/.bashrcarchivoEditado 2: si está utilizando VS Code , no necesita eliminarlo
__pycache__manualmente. Puede agregar el fragmento a continuación alsettings.jsonarchivo. 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
.pycarchivos 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" -deleteEliminar todos los archivos .pyo :
find . -path "*/*.pyo" -deleteFinalmente, 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
prermarchivo de mi paquete Debian :fuente
¿Por qué no solo usar
rm -rf __pycache__? Ejecutegit add -Adespué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