2008-11-14 10 views

Respuesta

21

Eso es ciertamente posible. Después de cargar/importar la secuencia de comandos, el intérprete de Python ya no tendrá acceso a ella, excepto cuando imprima una línea de origen en un rastreo de pila de excepción. Cualquier archivo pyc se regenerará la próxima vez ya que el archivo fuente es más nuevo que el pyc.

+0

genial ... pensé que no era por un error que estaba recibiendo, pero ahora veo que fue un error estúpido que estaba cometiendo. – carrier

+0

Notablemente: si elimina el archivo .py, pero deja el archivo .pyc, ese archivo aún será potencialmente importado. Me muerde al menos una vez al mes. –

8

En realidad, es preferible que su aplicación comience con un corrector de errores que rara vez cambia (si alguna vez lo hizo); antes de ejecutar, debe verificar si hay actualizaciones disponibles; en caso afirmativo, entonces los descargaría (normalmente el resto de la aplicación sería módulos) y luego los importaría e iniciaría la aplicación.

De esta manera, tan pronto como haya actualizaciones disponibles, iniciará la aplicación y ejecutará la última versión; de lo contrario, se requiere reiniciar la aplicación.

+0

probablemente lo implemente de esta manera. Gracias. – carrier

11

Si coloca la mayor parte del código en un módulo, puede hacer que el archivo principal (que es el que se ejecuta) verifique la ubicación de actualización y descargue automáticamente la versión más reciente e instálela antes de que el módulo importado.

De esta forma no tendría que reiniciar la aplicación para ejecutar la versión más reciente, simplemente vuelva a importar el módulo.

# Check version of module 
import module 

# Check update address 
if update_version > module.version: 
    download(update_module) 
    import module 
    reload(module) 

module.main() 

Puede usar la función reload() para forzar a un módulo a volver a cargar sus datos. Tenga en cuenta que hay algunas advertencias sobre esto: los objetos creados usando clases en este módulo no se actualizarán mágicamente a la nueva versión, y "desde el módulo importar cosas" antes de la reimportación puede dar como resultado "cosas" que se refieren al objeto antiguo "module.stuff ".

[Claramente, no he leído el post anterior con suficiente claridad - que hace exactamente lo que sugieren]

+0

Sí, pero su respuesta es mucho más exhaustiva, por lo que vale la pena votar :) – tzot

+0

Me gusta la idea, pero no funciona en sistemas en los que no se pueden instalar módulos. – sorin

+0

Siempre puede modificar el PYTHONPATH para incluir un directorio: cualquier archivo/carpeta que haya son módulos de python. –

1

Es posible que también desee comprobar hacia fuera este módulo (que se encuentra en 2,5 & 3 también)

http://www.python.org/doc/2.1.3/lib/os-process.html

Específicamente el método execv sobrescribirá el proceso actual con lo que se llama a partir de este método. He hecho algunas pruebas de personal y funciona de manera bastante confiable.

Cuestiones relacionadas