Convertir un script Python écrit dans PyTorch en exe avec PyInstaller

environnement

・ Windows 10 pro 64 bits ・ Python 3.7.9 ・ Anaconda 4.8.5 ・ PyTorch 1.6.0 + cpu ・ Pyinstaller 4.0

introduction

Lors de la conversion d'un script Python en un exe, il existe un Pyinstaller qui est souvent utilisé. Ici, nous allons décrire comment gérer l'erreur qui s'est produite lorsque le script qui a créé le classificateur de document avec PyTorch a été converti en exe.

Pour ceux qui utilisent Anaconda

Lors de l'installation de la bibliothèque, assurez-vous que pip et conda ne sont pas mélangés. De plus, lors de la conversion en exe, il est recommandé de créer un environnement virtuel dans lequel seules les bibliothèques requises pour que le script soit exe sont installées. Pour créer un environnement virtuel, procédez comme suit.

Le forum PyTorch suivant dit d'installer avec pip, donc j'ai tout installé avec pip.

[Create exe file - PyTorch Forums] (https://discuss.pytorch.org/t/create-exe-file/56626)

Comment utiliser Pyinstaller

Installation

$ pip install pyinstaller

Normalement, dans le répertoire contenant le script que vous souhaitez convertir en exe, vous pouvez créer un fichier exe avec l'une des commandes suivantes. (Si vous voulez avoir un fichier exe, ajoutez --onefile après)

$ pyinstaller sample.py

Cette fois, j'ai édité le fichier de spécification et je n'ai pas pu l'exécuter correctement avec un fichier, je vais donc en faire un fichier exe en suivant les deux étapes suivantes.

Commencez par créer un fichier de spécification avec la commande suivante.

$ pyi-makespec sample.py --onedir

Ensuite, créez le fichier exe de commande suivant.

$ pyinstaller sample.spec --clean

--clean est une option pour supprimer les fichiers créés par pyinstaller pour le même script. S'il n'y a pas de données dans la construction, il n'est pas nécessaire de les ajouter. Il doit y avoir des répertoires nommés build et dist dans le répertoire où vous avez exécuté cette commande. Un fichier exe a été créé dans dist.

Erreur à propos de PyTorch

L'erreur suivante s'est produite lors de l'exécution du fichier exe.

File "torch\__init__.py", line 189, in <module>
ImportError: numpy.core.multiarray failed to import

Je l'ai résolu en ajoutant la déclaration suivante au script python que je veux exécuter et en important explicitement multiarray.

import numpy.core.multiarray

Erreur ou avertissement indiquant que le fichier dll est introuvable

lib not found: 〇〇.dll

Je pense qu'un fichier comme 〇〇.spec est créé lors de l'exercice avec pyi-makespec ou pyinstaller. Modifiez la partie pathex de a = Analysis dans ce fichier comme suit.

sample.spec


a = Analysis(['sample.py'],
             pathex=['Chemin du fichier à exe', 'Le chemin du répertoire contenant le fichier dll qui donnait l'erreur(ajouter à)'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher,
             noarchive=False)

Dans mon cas, c'était torch_python.dll, donc le «chemin (supplémentaire)» du répertoire contenant le fichier dll qui donnait l'erreur ressemblerait à ce qui suit. (Si vous travaillez dans un environnement virtuel appelé release) 'C:\ProgramData\Anaconda3\envs\release\Lib\site-packages\torch\lib'

$ pyinstaller sample.spec --clean

Erreur à propos de Janome

Si vous utilisez Janome comme analyseur morphologique, vous obtiendrez l'erreur suivante lors de l'exécution.

FileNotFoundError: [Errno 2] No such file or directory: 
'C:\\Users\\username\\AppData\\Local\\Temp\\_MEI172322\\janome\\sysdic\\entries_compact0.py'

Les chemins de fichiers varient légèrement d'une personne à l'autre. Si vous avez l'option onefile, vous devriez avoir un chemin similaire.

Il semble que la cause en soit que les données du dictionnaire utilisées dans __Janome ne sont pas reconnues par pyinstaller et ne peuvent pas être incorporées. Copiez __janome dans le répertoire où se trouve exe. Il n'y a aucun problème si vous supprimez autre chose que sysdic dans janome.

Dans mon cas, il y avait un dossier janome dans le chemin suivant. C:\ProgramData\Anaconda3\envs\release\Lib\site-packages\janome

La cause de l'erreur a été décrite dans l'article suivant. L'histoire de la création d'un outil de détection de secousses typo / notation qui réduit la dépression des ingénieurs powerpo

Erreurs liées aux transformateurs

Si vous utilisez le tokenizer de transformers of huggingface, vous obtiendrez l'erreur suivante au moment de l'exécution.

FileNotFoundError: [Errno 2] No such file or directory: 
'C:\\Users\\username\\AppData\\Local\\Temp\\_MEI191522\\sacremoses\\data\\perluniprops\\IsN.txt'

C'est également la même chose que l'erreur liée à Janome, car les données de dictionnaire utilisées par __tokenizer ne sont pas reconnues par pyinstaller et ne peuvent pas être incorporées. La solution de contournement est la même que janome, et la solution consiste à copier __sacremoses dans le répertoire où se trouve l'exe. Il est normal de supprimer autre chose que data \ perluniprops dans les sacremoses. Le chemin des sacrèmes dans mon cas est le suivant. C:\ProgramData\Anaconda3\envs\release\Lib\site-packages\sacremoses

finalement

Lorsque j'utilise Pyinstaller, j'obtiens une erreur que je ne comprends pas. Si vous ne parvenez pas à déterminer la cause, une solution consiste à gérer le texte d'avertissement. Je faisais ça aussi: transpirer: quand je l'ai recherché et qu'il n'est pas sorti, j'étais sur le point d'abandonner, mais c'est quelque chose que je peux faire. Le développement de Pyinstaller lui-même est toujours en cours, il peut donc être résolu dans une future mise à jour.

référence

Create exe file - PyTorch Forums https://discuss.pytorch.org/t/create-exe-file/56626

L'histoire de la création d'un outil de détection de secousses typo / notation qui réduit la dépression des ingénieurs Powerpo https://qiita.com/youwht/items/062c41c88829fcf25107

Recommended Posts

Convertir un script Python écrit dans PyTorch en exe avec PyInstaller
Mémorandum PyInstaller Convertit Python [.py] en [.exe] avec 2 lignes
[Python] Que faire quand Aucun module nommé "pyproj.datadir" n'apparaît lors de la création d'Exe avec PyInstaller
[Python Kivy] Comment créer un fichier exe avec pyinstaller
Convertir des fichiers écrits en python, etc. en pdf avec la coloration syntaxique
Essayez de vous connecter à qiita avec Python
Test de stress avec Locust écrit en Python
Méthode de mise à jour automatique par python Pyinstaller exe
Comment utiliser BigQuery en Python
Pour faire fonctionner la station d'horodatage en Python
Comment utiliser is et == en Python
Création d'un fichier exe avec Python PyInstaller: le PC se fige dans le traitement parallèle
[REAPER] Comment jouer à Reascript avec Python
Introduction à la vérification de l'efficacité Chapitre 3 écrit en Python
Convertissez des PDF en images en masse avec Python
Connectez-vous à Yahoo Business avec Selenium Python
[Version améliorée] Script pour surveiller le CPU avec Python
Introduction à la vérification de l'efficacité Chapitre 2 écrit en Python
Script Python pour obtenir des informations de note avec REAPER
La synchronisation de la sortie est incorrecte lorsque la sortie standard (erreur) est convertie en fichier en Python
Tapez des notes sur les scripts Python pour exécuter le modèle PyTorch en C ++ avec libtorch
Comment convertir / restaurer une chaîne avec [] en python
Exécuter périodiquement un script python avec cron dans un environnement venv
Comment ajouter de l'aide à HDA (avec bonus de script Python)
Expliquez en détail comment créer un son avec python
Créez un fichier exe qui fonctionne dans un environnement Windows sans Python avec PyInstaller
Comment exécuter des tests avec Python unittest
Un mémorandum pour exécuter un script python dans un fichier bat
Convertissez l'image au format .zip en PDF avec Python
J'étais accro au grattage avec Selenium (+ Python) en 2020
Préparation au contrôle des objets rhino avec des scripts dans Grasshopper / Python
Je veux travailler avec un robot en python.
Il est facile d'exécuter SQL avec Python et de générer le résultat dans Excel
Un script qui compte jusqu'à 5 secondes et s'arrête dans le Python de Blender
Affectation d'une macro de génération de modèles dans un fichier de script Python à la touche F12
Après tout, il est faux de chat avec le sous-processus python.
Comment tester cette exception est déclenchée dans python unittest
[Road to Intermediate Python] Installer des packages en masse avec pip
Comment extraire n'importe quel rendez-vous dans Google Agenda avec Python
Comment implémenter Python EXE pour Windows avec le conteneur Docker
Introduction à la vérification des effets Rédaction des chapitres 4 et 5 en Python
Précautions lors de l'utilisation de Python avec AtCoder
Choses à garder à l'esprit lors de l'utilisation de cgi avec python.
Comment se connecter à AtCoder avec Python et soumettre automatiquement
Jusqu'à ce que l'API créée par Flask + MySQL soit convertie en Docker
Connectez-vous à BigQuery avec Python
Grattage au sélénium en Python
Pour vider stdout en Python
Exploitez LibreOffice avec Python
Grattage avec chromedriver en python
POST json avec le script Python 3
Débogage avec pdb en Python
Connectez-vous au site Web en Python
Publiez sur Slack avec Python 3
Gérer les sons en Python
Grattage avec du sélénium en Python
Grattage avec Tor en Python
Tweet avec image en Python
Combiné avec ordinal en Python
Parler avec Python [synthèse vocale]