・ Windows 10 Pro 64bit ・ Python 3.7.9 ・ Anaconda 4.8.5 ・ PyTorch 1.6.0 + CPU ・ Pyinstaller 4.0
Beim Konvertieren eines Python-Skripts in eine Exe wird häufig ein Pyinstaller verwendet. Hier wird beschrieben, wie mit dem Fehler umgegangen wird, der aufgetreten ist, als das Skript, das den Dokumentklassifizierer mit PyTorch erstellt hat, in exe konvertiert wurde.
Stellen Sie bei der Installation der Bibliothek sicher, dass pip und conda nicht gemischt sind. Bei der Konvertierung in exe wird außerdem empfohlen, eine virtuelle Umgebung zu erstellen, in der nur die Bibliotheken installiert sind, die für das exe-Skript erforderlich sind. So erstellen Sie eine virtuelle Umgebung:
Das folgende PyTorch-Forum sagt, dass mit pip installiert werden soll, also habe ich alles mit pip installiert.
[Create exe file - PyTorch Forums] (https://discuss.pytorch.org/t/create-exe-file/56626)
Installation
$ pip install pyinstaller
Normalerweise können Sie in dem Verzeichnis, das das Skript enthält, das Sie in exe konvertieren möchten, eine exe-Datei mit einem der folgenden Befehle erstellen. (Wenn Sie eine exe-Datei haben möchten, fügen Sie danach --onefile hinzu.)
$ pyinstaller sample.py
Dieses Mal habe ich die Spezifikationsdatei bearbeitet und konnte sie mit onefile nicht gut ausführen. Daher werde ich sie in den folgenden zwei Schritten zu einer exe-Datei machen.
Erstellen Sie zunächst eine Spezifikationsdatei mit dem folgenden Befehl.
$ pyi-makespec sample.py --onedir
Erstellen Sie als Nächstes die folgende Befehls-Exe-Datei.
$ pyinstaller sample.spec --clean
--clean ist eine Option zum Löschen von Dateien, die von pyinstaller für dasselbe Skript erstellt wurden. Wenn keine Daten im Build vorhanden sind, müssen sie nicht hinzugefügt werden. In dem Verzeichnis, in dem Sie diesen Befehl ausgeführt haben, sollten sich Verzeichnisse mit den Namen build und dist befinden. In dist wurde eine exe-Datei erstellt.
Der folgende Fehler ist beim Ausführen der exe-Datei aufgetreten.
File "torch\__init__.py", line 189, in <module>
ImportError: numpy.core.multiarray failed to import
Ich habe es gelöst, indem ich dem Python-Skript, das ich ausführen möchte, die folgende Anweisung hinzugefügt und Multiarray explizit importiert habe.
import numpy.core.multiarray
Fehler oder Warnung, dass die DLL-Datei nicht gefunden wurde
lib not found: 〇〇.dll
Ich denke, dass eine Datei wie 〇〇.spec erstellt wird, wenn Sie mit pyi-makepec oder pyinstaller trainieren. Ändern Sie den Pathex-Teil von a = Analysis in dieser Datei wie folgt.
sample.spec
a = Analysis(['sample.py'],
pathex=['Pfad der Datei, die exe sein soll', 'Der Pfad des Verzeichnisses, das die DLL-Datei enthält, die den Fehler ausgegeben hat(hinzufügen)'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher,
noarchive=False)
In meinem Fall war es torch_python.dll, also wäre der 'Pfad (zusätzlich)' des Verzeichnisses, das die DLL-Datei enthält, die den Fehler verursacht hat, ungefähr wie folgt. (Wenn Sie in einer virtuellen Umgebung namens Release arbeiten) 'C:\ProgramData\Anaconda3\envs\release\Lib\site-packages\torch\lib'
$ pyinstaller sample.spec --clean
Wenn Sie Janome als morphologischen Analysator verwenden, wird zur Laufzeit der folgende Fehler angezeigt.
FileNotFoundError: [Errno 2] No such file or directory:
'C:\\Users\\username\\AppData\\Local\\Temp\\_MEI172322\\janome\\sysdic\\entries_compact0.py'
Dateipfade variieren geringfügig von Person zu Person. Wenn Sie die Option onefile haben, haben Sie wahrscheinlich einen ähnlichen Pfad.
Es scheint, dass die Ursache darin besteht, dass die in __Janome verwendeten Wörterbuchdaten vom Pyinstaller nicht erkannt werden und nicht integriert werden können. Kopieren Sie __janome in das Verzeichnis, in dem sich exe befindet. Es gibt kein Problem, wenn Sie etwas anderes als sysdic in janome löschen.
In meinem Fall befand sich im folgenden Pfad ein Janome-Ordner. C:\ProgramData\Anaconda3\envs\release\Lib\site-packages\janome
Die Fehlerursache wurde im folgenden Artikel beschrieben. Die Geschichte der Entwicklung eines Tools zur Erkennung von Tippfehlern / Notationsschütteln, das die Depression von Powerpo-Ingenieuren verringert
Wenn Sie den Tokenizer von Transformatoren von huggingface verwenden, wird zur Laufzeit der folgende Fehler angezeigt.
FileNotFoundError: [Errno 2] No such file or directory:
'C:\\Users\\username\\AppData\\Local\\Temp\\_MEI191522\\sacremoses\\data\\perluniprops\\IsN.txt'
Dies entspricht auch dem Fehler in Bezug auf Janome, da die von __tokenizer verwendeten Wörterbuchdaten vom Pyinstaller nicht erkannt und nicht integriert werden können. Die Problemumgehung ist dieselbe wie bei janome. Die Lösung besteht darin, __sacremoses in das Verzeichnis zu kopieren, in dem sich die exe befindet. Es ist in Ordnung, alles andere als data \ perluniprops in Sakremosen zu löschen. Der Weg der Sakremosen ist in meinem Fall wie folgt. C:\ProgramData\Anaconda3\envs\release\Lib\site-packages\sacremoses
Bei Verwendung von Pyinstaller wird eine Fehlermeldung angezeigt, die ich nicht verstehe. Wenn Sie die Ursache nicht herausfinden können, besteht eine Möglichkeit darin, mit dem Warnungstext umzugehen. Ich habe das auch getan: Schweiß: Als ich es nachgeschlagen habe und es nicht herauskam, wollte ich aufgeben, aber es ist etwas, was ich tun kann. Die Entwicklung von Pyinstaller selbst ist noch nicht abgeschlossen, sodass es möglicherweise in einem zukünftigen Update behoben wird.
Create exe file - PyTorch Forums https://discuss.pytorch.org/t/create-exe-file/56626
Die Geschichte der Entwicklung eines Tools zur Erkennung von Tippfehlern / Notationsschütteln, das die Depression von Powerpo-Ingenieuren verringert https://qiita.com/youwht/items/062c41c88829fcf25107