pycache all python python-3.x caching

python - all - gitignore django



¿Qué es__pycache__? (7)

Por lo que entiendo, un caché es un archivo encriptado de archivos similares.

¿Qué hacemos con la carpeta __pycache__ ? ¿Es lo que damos a las personas en lugar de nuestro código fuente? ¿Son solo mis datos de entrada? Esta carpeta sigue siendo creada, ¿para qué sirve?


Cuando ejecutas un programa en Python, el intérprete lo compila primero en el bytecode (esto es una simplificación excesiva) y lo almacena en la carpeta __pycache__ . Si miras allí, encontrarás un montón de archivos que comparten los nombres de los archivos .py en la carpeta de tu proyecto, solo que sus extensiones serán .pyc o .pyo. Estas son versiones compiladas con bytecode y optimizadas con bytecode de los archivos de su programa, respectivamente.

Como programador, puede ignorarlo en gran medida ... Todo lo que hace es hacer que su programa comience un poco más rápido. Cuando sus scripts cambien, se volverán a compilar, y si elimina los archivos o toda la carpeta y ejecuta su programa nuevamente, volverán a aparecer (a menos que suprima específicamente ese comportamiento)

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 lo señala tcaswell, es configurar la variable de entorno PYTHONDONTWRITEBYTECODE en cualquier valor (de acuerdo con la página del manual de python, cualquier "cadena no vacía").


El intérprete de python compila el archivo de script * .py y guarda los resultados de la compilación en el directorio __pycache__ .

Cuando el proyecto se ejecuta de nuevo, si el intérprete identifica que el script * .py no se ha modificado, omite el paso de compilación y ejecuta el archivo * .pyc previamente generado en la carpeta __pycache__ .

Cuando el proyecto es complejo, puede reducir el tiempo de preparación antes de que el proyecto se ejecute. Si el programa es demasiado pequeño, puede ignorarlo usando python -B abc.py con la opción B


En 3.2 y __pycache__ posteriores, Python guarda los archivos de código de bytes compilados __pycache__ en un subdirectorio llamado __pycache__ ubicado en el directorio donde residen los archivos de origen con nombres de archivos que identifican la versión de Python que los creó (por ejemplo, script.cpython-33.pyc)


Se crea una carpeta __pycache__ cuando usa 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 el programa su segunda vez para abrir el otro archivo.


__pycache__ es un directorio que contiene archivos de caché de bytecode que son generados automáticamente por python, es decir, compilados por python, o .pyc , archivos. Quizás se pregunte por qué Python, un lenguaje "interpretado", tiene archivos compilados. Esta pregunta de SO aborda eso (y definitivamente vale la pena leer esta respuesta ).

Básicamente,

  • hace que tu programa se ejecute un poco más rápido
  • en general puedes ignorarlo

Los documentos de Python profundizan en cómo funciona exactamente y por qué existe:

  • Se agregó en Python 3.2 porque el sistema existente de mantenimiento de archivos .pyc en el mismo directorio causó varios problemas, como cuando un programa se ejecutó con intérpretes de Python de diferentes versiones. Para la especificación completa de características, vea python.org/dev/peps/pep-3147 .

__pycache__ es una carpeta que contiene el bytecode de Python 3 compilado y listo para ser ejecutado .

No se moleste en eliminar estos archivos ni suprima la creación, ya que afectará el rendimiento. Simplemente tenga listo un comando recursivo (vea a continuación) para limpiar cuando sea necesario, ya que el código de bytes puede volverse obsoleto en los casos de borde (ver comentarios).

Los programadores de Python generalmente ignoran el código de bytes. De hecho, __pycache__ y *.pyc son líneas comunes para ver en los archivos .gitignore . Bytecode no está destinado a la distribución y se puede desarmar utilizando el módulo dis .

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 {} /;

Reemplace __pycache__ con *.pyc para Python 2.

Esto establece una marca en todos esos directorios (archivos .pyc) que indican a Finder / Textmate 2 que los excluya de las listas. 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 un nuevo bytecode o si elimina los archivos de bytecode ocultos.

En Windows, el comando equivalente podría ser (no probado, bienvenida de script por lotes):

dir * /s/b | findstr __pycache__ | attrib +h +s +r

Es lo mismo que ir a través de las carpetas de ocultación del proyecto haciendo clic con el botón derecho> ocultar ...

La ejecución de pruebas unitarias es un escenario (más en los comentarios) en el que eliminar *.pyc __pycache__ y carpetas __pycache__ es realmente útil. Utilizo las siguientes líneas en mi ~/.bash_profile y simplemente ejecuto cl para limpiar cuando sea necesario.

alias cpy=''find . -name "__pycache__" -delete'' alias cpc=''find . -name "*.pyc" -delete'' ... alias cl=''cpy && cpc && ...''


pycache = Byte codifica los archivos compilados de python