Pregunta

He logrado empaquetar mi aplicación Pyqt4 como una aplicación "independiente" en Windows, funciona.

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

¿Cómo puedo decirle a Pyinstaller hacer su trabajo (armar los DLLS, generar el lanzador con el ícono brillante, etc.), pero dejar que los archivos .py intactaran?

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

¿Fue útil?

Solución

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


No lo he probado yo mismo (uso Pyinstaller en el trabajo, pero no lo tengo configurado en mi PC de 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")

Otros consejos

En realidad es más así:

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 el script es en realidad una tupla con el formulario:

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

También es posible que deba evitar que los archivos se incluyan en PYZ, consulte el PYZ TOC para ver si se incluyen, logré exigirlos usando excluyes = [myFile0] en el análisis ().

Creo que el intérprete incrustado en el ejecutable aún buscará archivos .py en el mismo directorio y/o pythonpath, Py2exe usa un archivo zip para los componentes nativos de Python, IIRC Pyinstaller los incrusta en el ejecutable, tal vez hay una opción para que haya una opción para que haya una opción para que haya una opción para que haya una opción para que haya una opción para que haya una opción para que haya una opción para una opción para que haya una opción para que haya una opción para que haya una opción Mantenga un zip como en py2exe (o no agregue en la especificación), luego intente ejecutar la aplicación sin los archivos y monitorear los accesos de archivos con Procmon.

Pyinstaller proporciona el --excluir opción para su caso de uso, y también es posible establecer el módulo o paquete que desea ignorar usando el excludes parámetro de Analysis() en el .spec expediente .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top