when variable the storing predefined name its imported current convertir contents compile called all python bytecode pyc

variable - ¿Cómo evitar que Python use archivos.pyc huérfanos?(Los que no tienen archivos.py coincidentes)



python compiled file pyc (2)

De vez en cuando me encuentro con un problema muy difícil de depurar: hay un archivo .pyc sobrante en alguna parte de mi $ PYTHONPATH, y el archivo .py correspondiente se ha movido a otra parte que está más adelante en $ PYTHONPATH, así que cuando lo intento para importar el módulo, se usa el archivo .pyc "huérfano" y se ignoran todos los cambios en el archivo .py "real", dejándome increíblemente confundido hasta que descubro que eso es lo que está sucediendo.

¿Hay alguna forma de hacer que Python no use archivos .pyc "huérfanos" o imprima una advertencia cuando los use?
Alternativamente, ¿el hecho de que tenga este problema significa que estoy haciendo algo mal, y si es así, qué?


No puedes evitar que Python cargue archivos .pyc si los encuentra en su ruta, no.

Tienes pocas opciones:

  1. Importe el módulo ofensivo y descubra cuál es su ruta:

    >>> import borkenmod >>> import sys >>> sys.modules[borkenmod.__name__].__file__ ''lib/python2.7/borkenmod.pyc''

  2. Use un script para recorrer su PYTHONPATH y elimine los archivos de código de bytes obsoletos . La secuencia de comandos vinculada elimina todos los archivos .pyc para los cuales no hay un archivo .py correspondiente.

  3. Limpie todos los archivos .pyc en su PYTHONPATH y compileall que Python los regenere con el módulo compileall :

    python -m compileall [path]

    luego retire ese archivo.

¡Tenga en cuenta que las dos últimas opciones podrían resultar en la eliminación de módulos legítimos de Python! Algunos módulos de Python (especialmente con licencia comercial) se distribuyen solo como código de bytes compilado.


Prueba esto ( ver aquí ):

PYTHONDONTWRITEBYTECODE

Si se configura, Python no intentará escribir .pyc .pyo o .pyo en la importación de módulos de origen. Esto es equivalente a especificar la opción -B .

Nuevo en la versión 2.6.

Pero hay un problema asociado: perderá el beneficio de tener archivos .pyc (por lo tanto, perderá rendimiento). La forma mejor, más limpia y más amigable es recorrer el directorio y limpiar los archivos .pyc huérfanos que no necesita . Debe hacerlo con una secuencia de comandos y asegurarse de no tener archivos .pyc que no estén asociados con los .py (por ejemplo, para algún nivel de ofuscación).