Registro de prueba para principiantes de PyQt5 (tres): resumen del paquete de Pyinstaller

Prólogo : Este registro es una nota simple durante el proceso de autoaprendizaje del autor. Explica el proceso desde la instalación de la biblioteca hasta finalmente empaquetarla en .exe. Se divide en tres partes para que los principiantes puedan consultar e intercambiar. Por favor, lectores si hay errores en la descripción. Para obtener consejos, la tercera parte de la lista se encuentra a continuación.

Uno, proceso de empaquetado de Pyinstaller

Anteriormente hice una herramienta basada en PyQt5 (consulte el registro de prueba para principiantes de PyQt5 para obtener más detalles ). Para intentar ejecutar en otras computadoras sin un entorno relacionado con Python, debe estar empaquetada en un archivo .exe. Después de buscar mucha información, se recomienda pyinstaller porque es fácil de usar. . Pero ... la experiencia real de TAT es extremadamente pobre, probablemente debido al talento personal y la falta de aprendizaje, lo que lleva al retraso en la resolución de varios problemas menores. Una vez que se satisfacen básicamente las necesidades, todavía es tiempo de escribir un resumen y una reseña, ¡Vamos!

Primero instale pyinstaller, ingrese el comando en la línea de comando:

pip instalar pyinstaller

Una vez que la instalación se completa y se muestra exitosa, puede comenzar el trabajo de empaquetado, luego ingrese en la línea de comando:

cd / d Letra de la unidad: \ El directorio del archivo empaquetado

Ingrese el directorio donde se encuentra el archivo xxx.py empaquetado , como e: \ ruta de archivo , e ingrese:

pyinstaller -w -D xxx.py

-wSignifica que el .exe empaquetado se ejecutará sin una ventana de Shell. -DSignifica que se empaquetará en un directorio o carpeta, que contiene un .exe y otros archivos relacionados. Generalmente, los proyectos con múltiples directorios y múltiples archivos se empaquetan de esta manera. Un solo .py puede con -Fparámetros;

Una vez completado el empaquetado, se generarán dos carpetas, build y dist, y un archivo xxx.spec (utilizado para configurar las reglas de empaquetado) en el directorio raíz de xxx.py , y el .exe generado estará en el subdirectorio de dist. Antes de asegurarse de que es infalible, se recomienda llamarlo desde la línea de comandos en lugar de hacer doble clic en el .exe directamente. De esta manera, el programa no retrocederá cuando se produzca un error y la información del error se puede mostrar en el Shell para facilitar la depuración.
【Figura 1】

Ejecute de nuevo después de modificar xxx.spec :

pyinstaller -w -D xxx.spec

2. Problemas encontrados en el embalaje (no resueltos por completo)

Echemos un vistazo a los posibles problemas:

1 、 Sin nombre de moudle

Pyinstaller buscará automáticamente las dependencias de xxx.py al empaquetar, pero siempre hay deficiencias en operaciones tontas. Es posible que aún no encuentre lo que necesita. En este momento, se utilizará el archivo de configuración xxx anterior . spec , el método de análisis para modificar el archivo es el siguiente:

a = Analysis(['MainFunction.py',
              'E:\\NewSysCrawler\\GUI_Call\\MyCrawler.py',
              'E:\\NewSysCrawler\\GUI_Call\\getdetails.py',
              'E:\\NewSysCrawler\\GUI_Call\\getbase.py',
              'E:\\NewSysCrawler\\QtFile\\getXlsxWidget.py',
              'E:\\NewSysCrawler\\QtFile\\mainWidget.py'],
             pathex=['E:\\NewSysCrawler','E:\\NewSysCrawler\\venv\\Lib\\site-packages'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

El primero [] es el xxx.py empaquetado (el autor es MainFunction.py ), y continúe agregando la ruta de otros archivos .py en el proyecto, y observe que el separador es una barra doble \\. El segundo pathex es la ruta de búsqueda al empaquetar, agregue la ruta de la biblioteca de la que depende el proyecto. Además, los datos son otros datos de archivo (o .dll de terceros) utilizados en el proyecto. El autor utilizó otros métodos de asociación, por lo que no se completa. De esta forma, debería resolverse la primera oleada de problemas.

2 、 No existe tal archivo o directorio

Archivos locales relacionados con la ejecución del programa ( como la cookie requerida por la herramienta de rastreo del autor cargará el historial desde el .txt local ). Si no hay una configuración en los datos, este problema puede ocurrir. La solución del autor es colocar directamente los archivos requeridos (carpeta) en el .exe raíz generado, en el código fuente se debe tener en cuenta que la ruta especificada, .\Filescomo el archivo .exe de ruta de archivo en la carpeta del directorio raíz ..\OtherFilesa otros archivos .exe en un directorio principal de la carpeta;

3 、 Permiso denegado

Editando hasta el momento, el autor ha olvidado las circunstancias en las que se produjo este error ... Se solucionó inexplicablemente. Parece que no hay permisos suficientes. Se especula que la herramienta de rastreo del autor generará un .txt de los datos rastreados en el directorio especificado, pero el directorio donde se encuentra no existe. Puede modificar el código para crear el directorio ( o también debería resolverse en los datos anteriores) ):

result =str(html.text) # 爬虫获取的内容
dirs = '..\\OtherFiles'
if not os.path.exists(dirs): # 判断目录是否存在,不存在则创建
    os.mkdir(dirs) # 
# open无法打开/创建不存在的目录,但可以自动新建.txt 
with open(dirs+"\\"+txt,'a',encoding="utf-8-sig") as file_handle:      
    file_handle.write(result)   # 写入

4 、 No hay suficientes valores para descomprimir

Verifique la entrada de formato de parámetro por pyinstaller;

5. El icono de .exe se muestra de forma anormal

El problema más problemático con Pyinstaller es que tiene ciertos requisitos para la configuración de iconos y el sistema de Windows también tiene requisitos para los iconos ( pero no he descubierto los detalles hasta ahora ... ), el autor lo ha intentado repetidamente y aún no ha logrado el efecto deseado, que se utiliza al empaquetar Los parámetros son:

pyinstaller -w -D xxx.py -ie: \ icons \ myIcon.ico

Pyinstaller solo puede procesar archivos .ico para configurar iconos. El siguiente código puede generar archivos de iconos de varios tamaños a la vez (o usar herramientas como Png2Ico, Format Factory o descargar en el sitio web de iconos):

from PIL import Image

image_size = [128,64,48,32,16]
def create_icon():
    for size in image_size:
        pri_image = Image.open("Icon.png")
        pri_image.resize((size, size), Image.ANTIALIAS).save("Icon_%d.ico" % (size))

if __name__ == "__main__":
    create_icon()

El icono del .exe generado todavía no se muestra ( no necesariamente, ¡puede tener éxito )! Así que cambié a atajos y cambié manualmente los íconos, pero los atajos dejaron de ser válidos en otras computadoras. Después de eso, el autor intentó escribir un lanzador, específicamente utilizado para llamar al .exe generado previamente, el código es el siguiente:

import os

def main():
    os.chdir(".\\NewSysCrawler20.4.23") # 更改工作目录
    os.system('NSCrawler.exe') # 执行

if __name__ == "__main__":
    main()

Use os.system()open mientras ejecuta la ventana .exe Shell, luego cambie a:

subprocess.call('NSCrawler.exe')

También use pyinstaller para empaquetar el .py del lanzador, y establezca el ícono al empaquetar el lanzador (¡ wow, el ícono se muestra correctamente! ), Y finalmente se convierte en la situación en la que runNSC.exe se usa para llamar al NSCrawler.exe de la herramienta original en el directorio de empaque original ;
【Figura 2】

En este punto, el problema del icono apenas se resuelve ( más tarde se descubrió que el archivo único empaquetado parece tener éxito ... ).

Además, recomiendo Greenfish Icon Editor Pro, una herramienta de dibujo de iconos. Los estudiantes que quieran diseñar patrones por sí mismos pueden probarla (el icono de la herramienta de rastreo del autor era originalmente una garra dibujada por sai ).

6, software antivirus falsos positivos

Probablemente debido al funcionamiento del sistema operativo, ¡piense en cómo optimizar el código! ~

7. Compatibilidad

Los programas escritos en Python de 64 bits solo se pueden ejecutar en otras computadoras de 64 bits después de ser empaquetados, y se pueden ejecutar computadoras de 32 bits, pero diferentes sistemas como XP / 7/10 también pueden tener problemas ( no entiendo las cosas subyacentes );

Tres, sobre la migración del proyecto Pycharm

Además de empaquetar y publicar, a menudo es necesario transferir todo el proyecto, cambiar el directorio en esta máquina o copiarlo a otras computadoras Si usa Pycharm (u otro IDE) para el desarrollo, el problema más común es: importinvalidación;

En el caso de Pycharm, primero copie el proyecto a otras computadoras o importe los proyectos de otras personas en esta computadora. Después de importar el proyecto a través de abrir, abra Configuración en el menú superior izquierdo:

Método 1: reinstalar las bibliotecas relevantes (llevará mucho tiempo si hay muchas dependencias);

Método 2: si el directorio venv está adjunto al proyecto copiado, y Lib \ site-packages contiene las bibliotecas dependientes, entonces configure el intérprete de Python actual en Scripts \ python.exe en el directorio venv . La figura muestra los intérpretes de dos proyectos diferentes, NewSysCrawler y PyProjects, que en proyectos diferentes buscarán paquetes en los paquetes de sitio correspondientes.
【Imagen 3】

Lo mismo ocurre con la migración de proyectos en esta máquina, siempre que se cambie el entorno de trabajo, la ruta de importación de las bibliotecas relacionadas se puede actualizar automáticamente. Si es un .py escrito por importación, haga clic con el botón derecho en la carpeta del proyecto a la izquierda y haga clic en Marcar directorio como raíz de origen.

Cuatro, resumen

1. Comando cmd:
cd /d X:\filedir ingrese al directorio y
cd ..\regrese al directorio superior;

2. Parámetros de pyinstaller:
-D empaquetar en una estructura de directorio ( -Fpaquete de archivo único),
-iestablecer el icono .exe
-wy ejecutar sin ventana;

3. Puntos a tener en cuenta: designación de ruta, archivos dependientes (carpetas);

4. Fuente de referencia:
resumen de la experiencia de publicación y empaquetado de Pyinstaller empaquetado del
proyecto de Python (dll personalizado)
implementación de zoom de anaconda3 + pyinstaller en imágenes de Python, y la generación de íconos de varios tamaños.
Use PyQt5 para desarrollar software de rastreo visual
Guía práctica de empaquetado de PyInstaller

5. Postdata:
Desde el desarrollo de herramientas de interfaz hasta el empaquetado, realmente me beneficié mucho. Como principiante, aprendí mucho. Sin embargo, descubrí que todavía hay muchas deficiencias en la revisión de la escritura. Algunas operaciones irregulares pueden no ayudar a los lectores novatos a "tomar el camino correcto". Solo se puede decir que apenas satisface las necesidades funcionales personales. Jaja, el intercambio futuro debe fortalecer la profesionalidad y ¡Sea riguroso, agréguese combustible! Más tarde, el autor descubrió que los archivos qrc también se pueden usar para la integración de recursos, por lo que los estudiantes interesados ​​pueden explorarlos por sí mismos. ¡Hasta la próxima! ~

Supongo que te gusta

Origin blog.csdn.net/zohan134/article/details/106264783
Recomendado
Clasificación