• Evitar que Python cree carpetas __pycache__

    Python compila los archivos .py a bytecode y los guarda en __pycache__ para reutilizarlos en futuras ejecuciones. Esto mejora el rendimiento, pero también ensucia el árbol de directorios, algo especialmente incómodo en:

    • Contenedores y despliegues reproducibles.
    • Entornos con volúmenes de solo lectura.
    • Proyectos donde queremos mantener el árbol de archivos limpio.

    Cuando trabajamos con proyectos en producción, contenedores o entornos donde no queremos archivos generados automáticamente, las carpetas __pycache__ pueden resultar molestas. En este hack detallamos varias formas sencillas y seguras de evitar que Python cree estas carpetas, sin romper el entorno ni modificar el comportamiento del código.

    DESACTIVAR USANDO UNA VARIABLE DE ENTORNO

    La forma más directa es usar la variable de entorno PYTHONDONTWRITEBYTECODE. De este modo, Python no generará archivos .pyc ni carpetas __pycache__.

    PYTHONDONTWRITEBYTECODE=1 python3 main.py
    

    Si queremos que se aplique a toda la sesión:

    export PYTHONDONTWRITEBYTECODE=1
    python3 main.py
    

    Esta es la opción recomendada para entornos de producción o scripts de arranque.

    DESACTIVAR DESDE EL PROPIO CÓDIGO

    También podemos indicarle a Python que no escriba bytecode desde el propio programa. Basta con añadir esta línea al inicio del archivo principal:

    import sys
    sys.dont_write_bytecode = True
    

    Esta opción es útil si lanzamos procesos hijos o si no controlamos cómo se ejecuta el script desde fuera.

    PONIENDO LA VARIABLE EN EL SHEBANG

    Si ejecutamos nuestros scripts directamente y usamos shebang, podemos integrarlo ahí:

    #!/usr/bin/env -S PYTHONDONTWRITEBYTECODE=1 python3
    

    De esta forma, cada vez que ejecutemos el archivo, Python se comportará como si la variable de entorno estuviera definida.

    ELIMINAR LAS CARPETAS EXISTENTES

    Si ya se han creado carpetas __pycache__, podemos limpiarlas fácilmente posicionándonos en la carpeta que queramos limpiar y ejeccutando el siguiente comando:

    find . -type d -name "__pycache__" -exec rm -rf {} +
    

    Consideraciones

    • Desactivar el bytecode no rompe la ejecución del programa.
    • Puede hacer que el primer arranque sea ligeramente más lento.
    • Es ideal para contenedores, despliegues automatizados y proyectos donde queremos evitar archivos temporales.

    Los comentarios están cerrados.