・ Windows 10 pro 64 bits ・ Python 3.7.9 ・ Anaconda 4.8.5 ・ PyTorch 1.6.0 + cpu ・ Pyinstaller 4.0
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.
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)
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.
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
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
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
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.
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