Por lo que entiendo, un caché es un archivo cifrado de archivos similares.
¿Qué hacemos con la __pycache__
carpeta? ¿Es lo que le damos a las personas en lugar de nuestro código fuente? ¿Son solo mis datos de entrada? Esta carpeta se sigue creando, ¿para qué sirve?
python
python-3.x
caching
usuario2063042
fuente
fuente
Python 3.8
puede usar una variable de entorno para cambiar la ubicación de los directorios de caché molestos: stackoverflow.com/a/57414308/1612318Respuestas:
Cuando ejecuta un programa en python, el intérprete lo compila primero en bytecode (esto es una simplificación excesiva) y lo almacena en la
__pycache__
carpeta. Si observa allí, encontrará un montón de archivos que comparten los nombres de los archivos .py en la carpeta de su proyecto, solo sus extensiones serán .pyc o .pyo. Estas son versiones compiladas por bytecode y compiladas por bytecode de los archivos de su programa, respectivamente.Como programador, puede ignorarlo en gran medida ... Todo lo que hace es hacer que su programa se inicie un poco más rápido. Cuando cambien sus scripts, se volverán a compilar, y si elimina los archivos o la carpeta completa 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
Otra opción, como señaló tcaswell, es establecer la variable de entorno
PYTHONDONTWRITEBYTECODE
en cualquier valor (de acuerdo con la página de manual de python, cualquier "cadena no vacía").fuente
PYTHONDONTWRITEBYTECODE=<any_value>
para suprimirla permanentemente.python2
coloca los archivos compilados en el mismo directorio que los originales, si no me equivoco.find . -name '*.pyc' -delete
Sí, find tiene una bandera para eliminar los archivos encontrados, por lo que no tiene que usar ningún shananigans xargs__pycache__
es una carpeta que contiene el bytecode de Python 3 compilado y listo para ejecutarse .No recomiendo eliminar estos archivos de forma rutinaria o suprimir la creación durante el desarrollo, ya que puede dañar el rendimiento. Solo tenga un comando recursivo listo (vea a continuación) para limpiar cuando sea necesario, ya que el bytecode puede volverse obsoleto en casos extremos (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.gitignore
archivos. El código de bytes no está destinado a la distribución y puede desmontarse usando eldis
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.
Reemplace
__pycache__
con*.pyc
para Python 2.Esto establece una marca en todos esos directorios (archivos .pyc) que le indica 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 código de bytes o si elimina los archivos ocultos.
En Windows, el comando equivalente podría ser (no probado, bienvenida secuencia de comandos por lotes):
Lo que es lo mismo que pasar por el proyecto ocultando carpetas usando el botón derecho> ocultar ...
Ejecutar pruebas unitarias es un escenario (más en los comentarios) donde eliminar los
*.pyc
archivos y__pycache__
carpetas es realmente útil. Utilizo las siguientes líneas en mi~/.bash_profile
y solo corrocl
para limpiar cuando es necesario.fuente
Se
__pycache__
crea una carpeta cuando usa la línea:o intente obtener información de otro archivo que haya creado. Esto lo hace un poco más rápido cuando ejecuta su programa por segunda vez para abrir el otro archivo.
fuente
Respuesta actualizada de más de 3.7 documentos:
Fuente: https://docs.python.org/3/tutorial/modules.html#compiled-python-files
Es decir, este directorio es generado por Python y existe para hacer que sus programas se ejecuten más rápido. No debe estar comprometido con el control de la fuente, y debe coexistir en paz con su código fuente local.
__pycache__
es un directorio que contiene archivos de caché de código de bytes que python genera automáticamente, es decir.pyc
, archivos compilados de python o . Quizás se pregunte por qué Python, un lenguaje "interpretado", tiene algún archivo compilado. Esta pregunta SO aborda eso (y definitivamente vale la pena leer esta respuesta ).Los documentos de Python profundizan más sobre cómo funciona exactamente y por qué existe:
.pyc
archivos en el mismo directorio causó varios problemas, como cuando se ejecutó un programa con intérpretes de Python de diferentes versiones. Para la especificación de características completas, consulte PEP 3174 .fuente
de los módulos de tutoriales oficiales de Python
de las preguntas frecuentes sobre programación de Python doc
fuente
La ejecución de una secuencia de comandos de Python provocaría que el código de bytes se genere en la memoria y se mantenga hasta que se cierre el programa. En caso de que se importe un módulo, para una reutilización más rápida, Python crearía un archivo .pyc de caché (PYC es 'Python' 'Compilado') donde se almacena en caché el código de bytes del módulo que se está importando. La idea es acelerar la carga de los módulos de Python evitando la recompilación (compilar una vez, ejecutar la política varias veces) cuando se vuelven a importar.
El nombre del archivo es el mismo que el nombre del módulo. La parte posterior al punto inicial indica la implementación de Python que creó el caché (podría ser CPython) seguido de su número de versión.
fuente
El intérprete de Python compila el archivo de script * .py y guarda los resultados de la compilación en el
__pycache__
directorio.Cuando el proyecto se ejecuta nuevamente, si el intérprete identifica que el script * .py no se ha modificado, omite el paso de compilación y ejecuta el archivo * .pyc generado previamente almacenado en la
__pycache__
carpeta.Cuando el proyecto es complejo, puede hacer que el tiempo de preparación sea más corto. Si el programa es demasiado pequeño, puede ignorarlo utilizando
python -B abc.py
laB
opción.fuente
Python Versión 2.x tendrá .pyc cuando el intérprete compile el código.
Python Versión 3.x tendrá __pycache__ cuando el intérprete compile el código.
fuente
En 3.2 y versiones posteriores, Python guarda los archivos de código de bytes compilados .pyc en un subdirectorio
__pycache__
ubicado en el directorio donde residen sus archivos fuente con nombres de archivo que identifican la versión de Python que los creó (por ejemplo, script.cpython-33.pyc)fuente
Cuando importas un módulo ,
Python almacena el bytecode compilado en el
__pycache__
directorio para que las futuras importaciones puedan usarlo directamente, en lugar de tener que analizar y compilar la fuente nuevamente.No hace eso simplemente ejecutando un script, solo cuando se importa un archivo.
(Las versiones anteriores solían almacenar el bytecode en caché como archivos .pyc que llenaban el mismo directorio que los archivos .py, pero a partir de Python 3 se movieron a un subdirectorio para hacer las cosas más ordenadas).
PYTHONDONTWRITEBYTECODE ---> Si se configura en una cadena no vacía, Python no intentará escribir archivos .pyc en la importación de módulos fuente. Esto es equivalente a especificar la opción -B.
fuente