Directorio de artículos
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 build
y dist
genere un main.spec
archivo. Contiene build
los registros y archivos de compilación necesarios durante el proceso duild, dist
y los paquetes empaquetados y los archivos ejecutables generados. main.spec
Hablaré 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
pyinstaller
Admite diferentes versiones de Python en un entorno virtual .
pyinstaller
Admite diferentes sistemas operativos en diferentes máquinas virtuales .
archivo sepc
Puede usar el pyi-makespec main.py
comando para generar el archivo de especificaciones sin empaquetarlo por ahora.
La mayor necesidad de modificación es datas
esta 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.
Puede cargar complementos de E / S con el skimage.io.use_plugin
comando. 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')
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