¿La mejor manera de evitar files * .pyc rancios?

¿Cuál es la mejor manera de evitar los files * .pyc añejos? A veces, especialmente cuando se cambian las twigs en el control de la versión, algunos files * .pyc se quedan allí y son utilizados por Python en lugar de los files fuente que tengo.

¿Cuál es la mejor estrategia para asegurarme de que no creo o uso inconscientemente los files rancios * .pyc?

Hay una variable de entorno útil para eso: PYTHONDONTWRITEBYTECODE

 export PYTHONDONTWRITEBYTECODE=true 

Similar a khampson, git y mercurial (y probablemente otros) permiten ganchos del lado del cliente. Puedes rociar sobre scripts que sí

 find -iname "*.pyc" -exec rm -f {} \; 

en Linux al less. Busque "git hooks" y "mercurial hooks" para más detalles.

Yo recomendaría un enfoque combinado.

En primer lugar, agregue *.pyc a su file .gitignore , lo que debería ayudar a evitar problemas al cambiar de twig (al less en los casos en que la causa sea que se haya cometido un file .pyc). Generalmente siempre agrego tanto *.pyc como *.log a mi .gitignore para no comprometer potencialmente ninguno de esos files accidentalmente, y así no saturan mi salida de git status .

En segundo lugar, cree una secuencia de commands del shell contenedor que primero elimina todos los files .pyc (recursivamente si su estructura de directory de origen lo solicita) y luego invoca su script actual. Eso debería garantizar que cualquier file .pyc resultante sea creado nuevamente utilizando la fuente actual.

es decir, algo así como (sin el & si desea que el script espere):

 #!/bin.sh rm -f *.pyc ./foo.py & 

Otra solución sería imp.reload() . Creo que en 2.7 puedes hacer lo siguiente (verificará más adelante)

 >>> import sys >>> reload(sys) <module 'sys' (built-in)> >>> 

La desventaja de este método es que las versiones de sus files * .pyc aún estarán en el repository y se actualizarán cada vez que haya una confirmación. Sin embargo, lo protegería de versiones obsoletas de * .pyc.

Otra solución sería hacer que git ignore los files * .pyc, así como eliminarlos. Otra solución sería ignorar el directory pycache . Del libro de Mark Lutz :

En 3.2 y posterior, Python guarda sus files de código .pyc byte en un subdirectory llamado pycache ubicado en el directory donde residen sus files fuente, y en files cuyos nombres identifican la versión de Python que los creó (por ejemplo, script.cpython-33. pyc). El nuevo subdirectory pycache ayuda a evitar el desorder, y la nueva convención de nomenclatura para los files de código de bytes evita que diferentes versiones de Python instaladas en la misma computadora sobrescriban el código de byte guardado de cada uno.