¿Qué es __pycache__?
Por lo que tengo entendido, un caché es un archivo cifrado de archivos similares.
¿Qué hacemos con la __pycache__
carpeta? ¿Es lo que le damos a la gente en lugar de nuestro código fuente? ¿Son solo mis datos de entrada? Esta carpeta se sigue creando, ¿para qué sirve?
Cuando ejecuta un programa en Python, el intérprete lo compila primero en código de bytes (esto es una simplificación excesiva) y lo almacena en la __pycache__
carpeta. Si miras allí, encontrarás un montón de archivos que comparten los nombres de los .py
archivos en la carpeta de tu proyecto, solo sus extensiones serán .pyc
o .pyo
. Estas son versiones compiladas con código de bytes y compiladas con código de bytes optimizadas de los archivos de su programa, respectivamente.
Como programador, puedes ignorarlo en gran medida... Todo lo que hace es hacer que tu programa comience un poco más rápido. Cuando sus scripts cambien, se volverán a compilar y, si elimina los archivos o la carpeta completa y ejecuta el programa nuevamente, volverán a aparecer (a menos que suprima específicamente ese comportamiento).
Cuando envías tu código a otras personas, la práctica común es eliminar esa carpeta, pero realmente no importa si lo haces o no. Cuando utiliza el control de versiones ( git
), esta carpeta normalmente aparece en el archivo ignorado ( .gitignore
) y, por lo tanto, no se incluye.
Si está utilizando CPython (que es el más común, ya que es la implementación de referencia) y no desea esa carpeta, puede suprimirla iniciando el intérprete con el indicador -B, por ejemplo.
python -B foo.py
Otra opción, como señala tcaswell, es establecer la variable de entorno PYTHONDONTWRITEBYTECODE
en cualquier valor (según la página de manual de Python, cualquier "cadena no vacía").
__pycache__
es una carpeta que contiene el código de bytes de Python 3 compilado y listo para ser ejecutado .
No recomiendo eliminar estos archivos de forma rutinaria y laboriosa ni suprimir su creación durante el desarrollo, ya que le hará perder tiempo. Simplemente tenga listo un comando recursivo (ver más abajo) para limpiarlo cuando sea necesario, ya que el código de bytes puede volverse obsoleto en casos extremos (ver comentarios).
Los programadores de Python normalmente ignoran el código de bytes. Efectivamente __pycache__
y *.pyc
son líneas habituales de ver en .gitignore
archivos. El código de bytes no está destinado a la distribución y se puede desmontar utilizando dis
el módulo .
Si está utilizando OS X, puede ocultar fácilmente todas estas carpetas en su proyecto ejecutando el siguiente comando desde la carpeta raíz de su proyecto.
find . -name '__pycache__' -exec chflags hidden {} \;
Reemplazar __pycache__
con *.pyc
para Python 2.
Esto establece una bandera en todos esos directorios (archivos .pyc) que le indica a Finder/Textmate 2 que los excluya de los listados. Es importante destacar que el código de bytes está ahí, simplemente está oculto.
Vuelva a ejecutar el comando si crea nuevos módulos y desea ocultar el nuevo código de bytes o si elimina los archivos de código de bytes ocultos.
En Windows, el comando equivalente podría ser (no probado, se acepta script por lotes):
dir * /s/b | findstr __pycache__ | attrib +h +s +r
Lo cual es lo mismo que revisar las carpetas ocultas del proyecto usando clic derecho > ocultar...
La ejecución de pruebas unitarias es un escenario (más en los comentarios) en el que eliminar *.pyc
archivos y __pycache__
carpetas es realmente útil. Utilizo las siguientes líneas en mi ~/.bash_profile
y simplemente las ejecuto cl
para limpiar cuando es necesario.
alias cpy='find . -name "__pycache__" -delete'
alias cpc='find . -name "*.pyc" -delete'
...
alias cl='cpy && cpc && ...'
y más últimamente
# pip install pyclean
pyclean .
Se crea una __pycache__
carpeta cuando usas la línea:
import file_name
o intenta obtener información de otro archivo que hayas creado. Esto lo hace un poco más rápido cuando ejecuta su programa por segunda vez para abrir el otro archivo.