Python empaqueta los archivos de recursos juntos en exe para explicar (hay ejemplos)

Aprendí a empacar antes. Aprenda a empaquetar programas con recursos hoy.
Enlace del tutorial anterior:
Python está empaquetado en un archivo ejecutable exe. El tutorial
establece un entorno virtual para resolver el problema del archivo exe de empaquetado de Python es demasiado grande.

Hoy hablaré sobre cómo empaquetar los archivos de recursos juntos.

Primero, agregaré la parte de recursos del código en el programa y escribiré la ruta absoluta del recurso. Descubrí que el exe empaquetado se puede ejecutar, pero cuando moví el archivo de recursos, descubrí que el exe empaquetado no se podía ejecutar. Esto definitivamente no funciona, lo que significa que no podemos dar el exe a otros amigos. Luego probé el nuevo método.
Paso 1: Establecer un entorno virtual e instalar las bibliotecas relacionadas
Esta parte se refiere al
establecimiento de un entorno virtual para resolver el problema del archivo exe de empaquetado de Python es demasiado grande.

Paso 2: Cree una carpeta de recursos
Principio básico: Pyinstaller puede agrupar archivos de recursos en un exe. Cuando el exe se está ejecutando, se generará una carpeta temporal. El programa puede acceder a los recursos en la carpeta temporal a través de sys._MEIPASS

Instrucciones oficiales: https://pythonhosted.org/PyInstaller/spec-files.html#spec-file-operation

Paso 3: Modifique el archivo .py
Modifique el código en hm_004.py para leer la parte de la ruta de datos del recurso.

import sys
import os

#生成资源文件目录访问路径
def resource_path(relative_path):
    if getattr(sys, 'frozen', False): #是否Bundle Resource
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

#访问res文件夹下数据.txt的内容
filename = resource_path(os.path.join("res","数据.txt"))

El código hm_004.py es el siguiente. Después de
modificar el código, el código hm_004.py no se puede ejecutar correctamente en plataformas como pycharm, porque el método de lectura de la ruta ha cambiado. ¿Qué importa? Lo que queremos es que el exen empaquetado pueda ejecutarse.

#coding:utf-8
import sys
import os

#生成资源文件目录访问路径
def resource_path(relative_path):
    if getattr(sys, 'frozen', False): #是否Bundle Resource
        base_path = sys._MEIPASS
    else:
        base_path = os.path.abspath(".")
    return os.path.join(base_path, relative_path)

#访问res文件夹下数据.txt的内容
filename = resource_path(os.path.join("res","数据.txt"))
print(filename)
with open(filename,encoding='utf-8') as f:
    lines = f.readlines()
    print(lines)
    f.close()

Paso 4: El
resultado del paquete exe generará la compilación, la carpeta dist y el archivo de especificaciones.

Paso 5: Elimine las carpetas build y dist. Modifique la especificación de
especificaciones y ábrala con el Bloc de notas. Primero abra un bloc de notas y luego arrastre el archivo de especificaciones a él.
Antes de la modificación, datas = [], este artículo lo cambia a la siguiente figura, lo que significa

Agregue el directorio res (y los archivos en el directorio) en el directorio actual de hm_004.py al exe de destino y colóquelo en el directorio raíz del archivo de tiempo cero en tiempo de ejecución, con el nombre res.

Si hay varios recursos

datas = [('res / bg.jpg', 'res'), ('exam.db', '.')] Hay
tuplas en la lista, el lado izquierdo es el nombre de archivo que desea agregar (la ruta relativa está bien), el lado derecho Es el nombre de la carpeta después de copiarla al proyecto.
Por ejemplo: ('res / bg.jpg', 'res') in'res / bg.jpg 'significa que hay una imagen bg.jpg en la carpeta res en el directorio raíz del proyecto, que se copia en la carpeta res después del proyecto.
'exam.db' en ('exam.db', '.') es el archivo en el directorio raíz del proyecto, y '.' significa el directorio raíz, es decir, copiado en el directorio raíz del proyecto.
Aún debe prestar atención a la forma de leer la ruta de recursos, consulte el tercer paso.

Paso 6: Empaquete el exe nuevamente,
esta vez es empaquetar el archivo de especificaciones.

pyinstaller -F hm_004.spec

Se volverán a generar los archivos build y dist. No hay especificaciones nuevas

archivo dist

Paso 7: Ejecutar exe
Dado que el ejemplo de este artículo es un programa simple, no una interfaz, si hace clic en exe directamente, parpadeará porque no es un programa de interfaz, como pyqt.
Sin interfaz, ¿cómo necesito ejecutar un programa Python, ejecutar
cmd en la carpeta dist, luego ingresar el nombre del programa y presionar Enter?

El resultado es el siguiente: Se encuentra que la ruta del archivo es diferente de la ruta absoluta del data.txt original.

Envíelo a otros amigos para intentar ejecutarlo
. Elimino el archivo res.
Y copie la carpeta dist en el escritorio (si es un programa de interfaz, solo puede copiar el exe)
el archivo dist en el escritorio, (en este momento, mi computadora no tiene ningún archivo de recursos data.txt, porque lo he eliminado)

Corre de nuevo:

otro

En la vida real, nuestras tareas son generalmente muy complicadas, como involucrar modelos. Necesito descargar tensorflow, etc.
Algunos paquetes son demasiado grandes para instalarlos directamente en el entorno virtual, por lo que debe descargarlos localmente e instalarlos.
Enlace del tutorial: Python instala paquetes de terceros

Qué pasos de empaquetado son los mismos que en el tutorial anterior. La diferencia es que se necesitan demasiados paquetes y los paquetes no son compatibles entre sí. Por ejemplo, la biblioteca de keras es necesaria para el empaquetado y tesorflow es necesario para Keras, pero la versión de tensorflow debe ser superior a 2.0 durante el proceso de empaquetado.
El problema de la compatibilidad entre paquetes es exactamente el inconveniente de Python. Depura el paquete lentamente cuando sea necesario.

Inserte la descripción de la imagen aquí

La nueva computadora en ingeniería eléctrica: Yu Dengwu. Escribir publicaciones de blog no es fácil. Si crees que este artículo es útil para ti, por favor dame un visto bueno y apoyo, gracias.

Inserte la descripción de la imagen aquí

Supongo que te gusta

Origin blog.csdn.net/kobeyu652453/article/details/108732747
Recomendado
Clasificación