PyInstaller pero manteniendo los archivos .py actualizables

He logrado empaquetar mi aplicación PyQt4 como una aplicación “independiente” en Windows, funciona.

Sin embargo, esta aplicación puede actualizarse a sí misma, lo que se hace al reemplazar el código real escrito por mí (archivos .py) con nuevas versiones, descargadas a través de Internet.

¿Cómo puedo decirle a PyInstaller que haga su trabajo (juntar las DLL, generar el iniciador con el ícono shiny, etc.), PERO dejar que los archivos .py no se toquen?

Necesito esos archivos directamente en el disco para que la actualización automática funcione.

Puede cambiar el archivo de especificaciones para que no incluya específicamente los archivos por nombre (al crear listas), luego asegúrese de que estos archivos estén incluidos. Tendría que verificar si hay una opción para incluir pero no comstackr.


No lo he intentado yo mismo (uso pyInstaller en el trabajo pero no lo tengo configurado en la PC de mi casa) pero este es el tipo de cosas que creo que debería estar bien:

a = Analysis(['main.py']) excluded = ['myfile0.py', 'myfile1.py', 'myfile2.py'] a.scripts = [script from script in a.scripts if script not in excluded] pyz = PYZ(a.pure) exe = EXE(a.scripts, pyz, name="main.exe", exclude_binaries=1) dist = COLLECT(exe, a.binaries, excluded, name="dist") 

En realidad es más como esto:

 a = Analysis(['main.py']) excluded = ['pathto\\myfile0.py', 'pathto\\myfile1.py', 'pathto\\myfile2.py'] a.scripts = [script from script in a.scripts if script[1] not in excluded] pyz = PYZ(a.pure) excluded_files_collect = [(f.split('\\')[-1],f,'DATA') for f in excluded] exe = EXE(a.scripts, pyz, name="main.exe", exclude_binaries=1) dist = COLLECT(exe, a.binaries, excluded_files_collect , name="dist") 

Como guión es en realidad una tupla con la forma:

 ('myfile0.py', 'pathto\\myfile0.py', 'PYSOURCE') 

También es posible que tenga que evitar que los archivos se incluyan en PYZ, consulte el pyz toc para ver si se incluyen, logré excluirlos usando excludes = [myfile0] en Analysis ().

Creo que el intérprete integrado en el ejecutable seguirá buscando archivos .py en el mismo directorio y / o PYTHONPATH, py2exe utiliza un archivo zip para los componentes nativos de Python, iirc pyinstaller los incrusta en el ejecutable, tal vez haya una opción para mantenga un zip como en py2exe (o no los agregue en la especificación), luego intente ejecutar la aplicación sin los archivos y monitoree los accesos de archivos con procmon.

pyinstaller proporciona la opción –exclude para su caso de uso, y también es posible configurar el módulo o paquete que desea ignorar usando el parámetro excludes de Analysis() en el archivo .spec .