Archivos .pyc generados cada vez que se importan los elementos de código correspondientes y se actualizan si los archivos de código correspondientes se han actualizado. Si se eliminan los archivos .pyc, se volverán a generar automáticamente. Sin embargo, no se eliminan automáticamente cuando se eliminan los archivos de código correspondientes.
Esto puede causar algunos errores realmente divertidos durante la refactorización a nivel de archivo.
En primer lugar, puede terminar enviando un código que solo funciona en su máquina y en la de nadie más. Si tiene referencias colgantes a archivos que eliminó, estos seguirán funcionando localmente si no elimina manualmente los archivos .pyc relevantes porque los archivos .pyc se pueden usar en las importaciones. Esto se agrava con el hecho de que un sistema de control de versiones configurado correctamente solo enviará archivos .py al repositorio central, no archivos .pyc, lo que significa que su código puede pasar la "prueba de importación" (todo se importa bien) sin problemas y no trabajar en la computadora de otra persona.
En segundo lugar, puede tener algunos errores bastante terribles si convierte los paquetes en módulos. Cuando convierte un paquete (una carpeta con un __init__.py
archivo) en un módulo (un archivo .py), los archivos .pyc que alguna vez representaron ese paquete permanecen. En particular, los __init__.pyc
restos. Entonces, si tiene el paquete foo con algún código que no importa, luego elimine ese paquete y cree un archivo foo.py con alguna función def bar(): pass
y ejecute:
from foo import bar
usted obtiene:
ImportError: cannot import name bar
porque python todavía está usando los archivos .pyc antiguos del paquete foo, ninguno de los cuales define bar. Esto puede ser especialmente problemático en un servidor web, donde el código totalmente funcional puede romperse debido a archivos .pyc.
Como resultado de estos dos motivos (y posiblemente otros), su código de implementación y el código de prueba deben eliminar los archivos .pyc, como con la siguiente línea de bash:
find . -name '*.pyc' -delete
Además, a partir de Python 2.6, puede ejecutar Python con la -B
bandera para no usar archivos .pyc. Consulte ¿Cómo evitar los archivos .pyc? para más detalles.
Consulte también: ¿Cómo elimino todos los archivos .pyc de un proyecto?
rm *.pyc
. Esto no eliminará los archivos .pyc en carpetas anidadas. Úselo en sufind . -name '*.pyc' -delete
lugar