[Python] J'ai examiné la méthode de conversion exe pour distribuer des outils d'efficacité commerciale.

Chose que tu veux faire

Je souhaite distribuer en interne un outil d'efficacité commerciale conçu avec python. De nombreux membres ne sont pas familiers avec les PC, alors distribuez-les sous forme de fichiers exe. Il existe plusieurs façons de le faire exe. Pensez par vous-même à la méthode à utiliser du point de vue du "temps de démarrage", de la "taille du fichier", de la "facilité de distribution / introduction", etc.

Conclusion d'abord

Je pensais qu'il était sûr de faire ** onefile avec ** pyinstall ** ** + ** en faire un exe avec le minimum de bibliothèques requises installées dans l'environnement virtuel **. Dans les situations où le temps de démarrage est nécessaire, il peut être nécessaire d'abandonner la conversion d'un fichier.

environnement

Windows10 Home Python3.8.2(32bit) Visual Studio Code 1.45.1 PyInstaller3.6

Contenu étudié et vérifié

  1. Code à vérifier
    1. Exécution par PyInstaller 1-1. Pas un seul fichier (par défaut) 1-2. Créer un fichier
  2. Méthodes autres que PyInstaller
    1. Faites-le exe dans un environnement virtuel

0. Code à vérifier

J'ai créé un test.py super simple et converti ce fichier en un exe par chaque méthode. Il n'y a pas de signification particulière au pyautogui importé (parce que je me sentais seul qu'il n'y avait pas de bibliothèque externe)

test.py


import pyautogui
print("Hello,World!")

Le temps de démarrage a été mesuré avec l'outil décrit à la fin de cet article.

1. 1. Exécution par PyInstaller

Le moyen de conversion exe qui semble être le plus important à l'heure actuelle. Puisqu'il ne s'agit pas d'une bibliothèque standard, installez-la avec pip. Installez avec > pip install py installer depuis le terminal. Après cela, exécutez > pyinstaller <fichier.py converti> <-option> à partir du terminal, et la conversion exe commencera. Vous pouvez éventuellement le définir sur un fichier, qui sera décrit plus tard, renommer le fichier exe et masquer la console (écran noir) au démarrage. Notez que le "-" (trait d'union) facultatif peut être un ou deux.

python


> pyinstaller test.py --name test2 --noconsole --onefile

Lorsque le message «INFO: Construction de EXE à partir de EXE-00.toc terminée avec succès» s'affiche, le processus est terminé. Le fichier exeized est créé dans un dossier appelé "dist" dans le répertoire courant. Si vous ne spécifiez pas de nom dans l'option, un fichier avec le nom de fichier .exe à convertir est généré.

1-1. Pas un seul fichier (par défaut)

Si --onefile n'est pas spécifié dans l'option (= par défaut), un dossier avec le nom de fichier est créé dans le dossier dist et le fichier exe y est stocké. L'avantage est le temps de démarrage rapide. Il faut plus de 5 secondes pour démarrer avec la méthode à un fichier décrite plus loin, mais elle peut être démarrée en moins d'une seconde sans en faire un fichier. Cependant, l'intérieur du répertoire ressemble à ceci. image.png Dans le cas de mon lieu de travail, il est facile d'imaginer que même si vous distribuez ce dossier en disant «Veuillez cliquer sur XXX.exe pour le démarrer», il ne sera plus utilisé après un certain temps. (Si vous pouvez créer un raccourci, il peut y avoir un chan)

1-2. Créer un fichier

Après tout, je veux rassembler les outils dans un seul fichier afin qu'ils puissent être utilisés simplement après la distribution. C'est facile à faire. Ajoutez simplement l'option --onefile (ou -F) lors de l'exécution de pyinstaller. Cela ajoutera un seul fichier exe uniquement au dossier dist. L'inconvénient est le temps de démarrage. Si aucune mesure n'est prise, même un code super simple comme test.py prendra plus de 5 secondes pour démarrer.

2. Méthodes autres que PyInstaller

"Cx-Freeze" et "py2ex" semblent être célèbres pour Windows. On dit que py2ex ne prend en charge que jusqu'à Python 3.4. (Il semble que si vous le téléchargez directement depuis Github, il peut prendre en charge jusqu'à Python 3.7. Je l'ai essayé, mais je ne comprenais pas comment changer de version de Python, alors j'ai abandonné.) J'ai donc essayé cx-Freeze. Le site suivant a été utile pour savoir comment installer et exe, je vais donc l'omettre. J'ai essayé de faire de Python un exe avec cx_Freeze Puisqu'il est nécessaire de créer un fichier de paramètres appelé setup.py séparément du script à convertir, je crains que cela ne prenne du temps. (Il semble que py2ex soit le même) Le temps de démarrage est assez rapide (environ 0,6 seconde), mais il semble qu'il ne puisse pas être converti en un seul fichier, et la taille du fichier ne change pas beaucoup, j'ai donc senti qu'il y avait peu de mérite par rapport à PyInstaller.

3. 3. Faites-le exe dans un environnement virtuel

Lorsque test.py a été converti avec PyInstaller + onefile, le fichier qui vient d'afficher "Hello, World!" Est devenu environ 36M. C'est encore une bonne personne, et il semble que cela dépasse souvent les 100 Mo selon l'environnement. Apparemment, PyInstaller a tendance à faire gonfler les fichiers, et la cause semble être qu'il regroupe toutes les bibliothèques installées dans le Python que vous utilisez. Par conséquent, en guise de contre-mesure, j'ai appris dans l'article suivant que je devais créer un environnement virtuel vierge sans rien installé, y mettre le minimum de bibliothèques nécessaires et le faire exe avec pyinstaller. [Sad news] PyInstaller crachera un fichier exe de 300 Mo

J'ai organisé ma propre façon de créer un environnement virtuel, je vais donc l'écrire sous forme de mémorandum.

3-1. Créer un environnement virtuel

Exécutez la commande "venv" depuis le terminal général pour construire un environnement virtuel (abréviation de Vertial ENVironment?)

python


> py -m venv <Tout nom d'environnement virtuel (ici pyautogui_only)>

⇒ Un dossier avec un nom d'environnement virtuel arbitraire est créé dans le répertoire courant

3-2. Activez l'environnement virtuel créé.

Cliquez avec le bouton droit de la souris sur "Activate.ps1" depuis le dossier "Scripts" du dossier créé précédemment ⇒ Copier comme chemin ⇒ Coller dans le terminal général ⇒ Supprimer "(guillemets doubles) avant et après" ⇒ Exécuter avec ENTER (déplacer avec cd) Peut être exécuté

python


> C:\Users\aaa\Desktop\python\pyautogui_only\Scripts\Activate.ps1

Si vous obtenez l'erreur «Parce que l'exécution du script est désactivée sur ce système», le script est probablement dans un état où il ne peut pas être exécuté en raison des paramètres de sécurité. Alors, exécutez d'abord la commande suivante sur le terminal général.

python


> Set-ExecutionPolicy RemoteSigned -Scope Process

Ensuite, exécutez à nouveau Activate.ps1 et vous devriez probablement pouvoir l'activer. Ce paramètre doit être redéfini à chaque fois que le terminal est arrêté. La page de référence ↓ décrit également comment modifier définitivement les paramètres du code VS. Résumé des paramètres d'utilisation de venv fluide avec Visual Studio Code pour Windows Si l'activation est réussie, le nom de l'environnement virtuel sera affiché sur le côté gauche du répertoire courant de l'hyper terminal.

python


(pyautogui_only) PS C:Users\~\ > _
3-3. Installez uniquement les bibliothèques requises avec la commande pip.

Dans le cas de test.py cette fois, seul pyautogui est installé. N'oubliez pas d'installer PyInstaller également. (Au fait, si vous obtenez une erreur lors de l'installation du dernier pyautogui, veuillez également consulter ici)

3-4. Exécutez PyInstaller

C'est OK comme si ce n'était pas un environnement virtuel.

python


(pyautogui_only) PS C:Users\~\ > pyinstaller test.py --onefile

⇒ Le fichier exe est sorti dans le dossier dist. (Au fait, pour sortir de l'environnement virtuel, exécutez la commande de désactivation dans le terminal général)

En conséquence, dans mon cas, la taille du fichier, qui était d'environ 36 Mo en l'état, pourrait être supprimée à environ 10 Mo. Le temps de démarrage a été réduit d'environ 6 secondes à environ 2,3 secondes.

Résumé

Les valeurs numériques vérifiées cette fois sont les suivantes. Comme mentionné ci-dessus, dans le but de distribuer des outils d'amélioration de l'entreprise, je pense que l'installation minimale de PyInstaller + onefile + bibliothèque dans un environnement virtuel est suffisante. (Si ça commence pendant quelques secondes, ça ne devrait pas être si douloureux à chaque fois) Créer un environnement virtuel un par un est un peu gênant, mais il semble que la conversion exe ne soit pas une tâche qui se produit si fréquemment. image.png Bien sûr, ce résultat est le cas d'un programme super simple comme test.py. La situation peut changer à mesure que le nombre de bibliothèques externes utilisées augmente, il est donc nécessaire de faire un jugement à chaque fois.

Bonus: un programme créé pour mesurer le temps de démarrage

python



import time
import subprocess
import sys
import csv
import pyautogui
import os

if len(sys.argv) >= 2:

    start_time = time.time()
    subprocess.run(sys.argv[1]) #← Faites glisser&Recevez le chemin du fichier déposé et exécutez
    end_time = time.time()
    process_time = end_time - start_time

    pyautogui.alert(str(sys.argv[1]) + " " + str(process_time)) #Affichage des résultats uniquement

    #Sortir le résultat en csv dans le même répertoire que ce fichier
    file_name = os.path.join(os.path.dirname(sys.argv[0]), "check_time.csv")
    with open(file_name, "a", newline="") as fo:
        csv_file = csv.writer(fo)
        csv_file.writerow([sys.argv[1], process_time])

↑ Faites-en un fichier exe, démarrez le programme par glisser-déposer, et mesurez le temps qu'il a fallu pour terminer ⇒ Sortie.

Recommended Posts

[Python] J'ai examiné la méthode de conversion exe pour distribuer des outils d'efficacité commerciale.
[Python] J'ai essayé de remplacer le nom de la fonction par le nom de la fonction
vprof - J'ai essayé d'utiliser le profileur pour Python
J'ai essayé la méthode des moindres carrés en Python
J'ai essayé la programmation python pour la première fois.
Ce que je suis entré dans Python pour la première fois
J'ai essayé Python sur Mac pour la première fois.
HoloViews peut devenir la norme pour les outils de visualisation Python
J'ai essayé python pour la première fois avec heroku
Refactoring des outils utilisables avec Python
J'étais accro au débogueur Python pdb pendant 2 minutes
Je ne savais pas comment utiliser l'instruction [python] for
Notes diverses sur l'utilisation de python pour les projets
J'ai examiné l'arborescence des appareils
J'ai téléchargé la source python
J'ai essayé d'utiliser Kwant, un module python pour le calcul du transport quantique
J'ai eu un AttributeError en me moquant de la méthode ouverte en python
J'ai réussi l'examen de certification d'ingénieur python, j'ai donc publié la méthode d'étude
J'ai essayé de créer un outil d'échafaudage pour le framework Web Python Bottle
J'ai essayé d'améliorer l'efficacité du travail quotidien avec Python