Use PyInstaller para empaquetar Python en exe

Sobre PyInstaller

Empaquete los paquetes e intérpretes necesarios para que se ejecute el programa.
Documentación oficial: https://pyinstaller.readthedocs.io/en/stable/requirements.html

Empaquetar en una carpeta

pyinstaller main.py

Empaquetar en un archivo ejecutable

Se crea una carpeta temporal en tiempo de ejecución, y los paquetes necesarios se copian en la carpeta temporal, por lo que es un poco más lenta. Se eliminará automáticamente cuando finalice normalmente y la carpeta temporal no se eliminará cuando finalice de forma anormal.

pyinstaller --onefile main.py  # pyinstaller -F main.py 
pyinstaller --onefile --windowed main.py  # 窗口应用

Ocultar código fuente

Las aplicaciones empaquetadas no contienen ningún código fuente, pero compiladas en archivos pyc se pueden descompilar para exponer la lógica del código.

Si desea ocultar el código fuente más a fondo, compílelo con CPython y empaquételo con pyinstaller.

pyinstaller también puede cifrar el código de bytes de Python, pero también puede ser fácilmente descifrado por la clave para obtener el código de bytes.

Como usar

Ejecute pyinstaller main.py, cree automáticamente dos directorios en el directorio actual buildy distgenere un main.specarchivo. Contiene buildlos registros y archivos de compilación necesarios durante el proceso duild, disty los paquetes empaquetados y los archivos ejecutables generados. main.specHablaré de eso más tarde.

UPX

UPX comprime archivos ejecutables y bibliotecas, haciéndolo más pequeño. Descompresión dinámica durante el tiempo de ejecución.

Cifrar código de bytes de Python

Necesita instalar el módulo PyCrypto primero, use parámetros--key={16char}

Múltiples versiones

pyinstallerAdmite diferentes versiones de Python en un entorno virtual .

pyinstallerAdmite diferentes sistemas operativos en diferentes máquinas virtuales .

archivo sepc

Puede usar el pyi-makespec main.pycomando para generar el archivo de especificaciones sin empaquetarlo por ahora.

La mayor necesidad de modificación es datasesta parte, puede empaquetar los archivos utilizados en el código juntos, por ejemplo datas=[('./data/1.img', './data/'), ('./model/detect.weights', '.')], el formato es (en relación con la ruta de la especificación, en relación con la ruta del archivo ejecutable). Pero parece copiarse manualmente después del empaque.



Profundidad máxima de recursión excedida :

La capa de recursión es demasiado profunda, lo que se puede resolver agregando las siguientes dos líneas de código en el archivo main.spec

# -*- mode: python -*-
import sys
sys.setrecursionlimit(5000)  #5000可根据情况修改


No se pueden encontrar los directorios de complementos PyQt5 existentes :

No puedo encontrar PyQt5. En este caso, puede usar conda para instalar PyQt5. Reinstalar con pip puede resolver este problema.

Referencia: https://stackoverflow.com/questions/52376313/converting-py-file-to-exe-cannot-find-existing-pyqt5-plugin-directories/52376965



Puede cargar complementos de E / S con el skimage.io.use_plugincomando. Puede encontrar una lista de todos los complementos disponibles usandoskimage.io.plugins() :

Modifique los lugares relevantes en main.spec al siguiente formulario:

from PyInstaller.utils.hooks import collect_data_files, collect_submodules

datas = collect_data_files("skimage.io._plugins")
hiddenimports = collect_submodules('skimage.io._plugins')

Referencia: https://stackoverflow.com/questions/34761862/pyinstaller-you-may-load-io-plugins-with-the-skimage-io-use-plugin



En el proceso de empaquetado real, debido a los diferentes paquetes utilizados en el código, puede encontrar otros problemas, debe explorarlo usted mismo.

Referencia

74 artículos originales publicados · Me gusta 11 · Visitas 30,000+

Supongo que te gusta

Origin blog.csdn.net/yijiull/article/details/89740089
Recomendado
Clasificación