Konvertieren Sie in PyTorch geschriebenes Python-Skript mit PyInstaller in exe

Umgebung

・ Windows 10 Pro 64bit ・ Python 3.7.9 ・ Anaconda 4.8.5 ・ PyTorch 1.6.0 + CPU ・ Pyinstaller 4.0

Einführung

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.

Für diejenigen, die Anaconda verwenden

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)

Verwendung von Pyinstaller

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.

Fehler bei PyTorch

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

Fehler über Janome

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

Fehler im Zusammenhang mit Transformatoren

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

Schließlich

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.

Referenz

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

Recommended Posts

Konvertieren Sie in PyTorch geschriebenes Python-Skript mit PyInstaller in exe
PyInstaller-Memorandum Konvertieren Sie Python [.py] in [.exe] mit 2 Zeilen
[Python] Was tun, wenn beim Erstellen von Exe mit PyInstaller kein Modul mit dem Namen "pyproj.datadir" angezeigt wird?
[Python Kivy] So erstellen Sie mit pyinstaller eine exe-Datei
Konvertieren Sie in Python usw. geschriebene Dateien in PDF mit Syntax-Hervorhebung
Versuchen Sie, sich mit Python bei qiita anzumelden
Stresstest mit Locust in Python geschrieben
Automatische Update-Methode von Python Pyinstaller exe
So arbeiten Sie mit BigQuery in Python
So betreiben Sie die Zeitstempelstation in Python
Verwendung ist und == in Python
Erstellen einer exe-Datei mit Python PyInstaller: PC friert bei paralleler Verarbeitung ein
[REAPER] Wie man Reascript mit Python spielt
Einführung in die Überprüfung der Wirksamkeit Kapitel 3 in Python geschrieben
Konvertieren Sie PDFs mit Python in Massenbilder
Melden Sie sich mit Selenium Python bei Yahoo Business an
[Verbesserte Version] Skript zur Überwachung der CPU mit Python
Einführung in die Überprüfung der Wirksamkeit Kapitel 2 in Python geschrieben
Python-Skript zum Abrufen von Notizinformationen mit REAPER
Das Ausgabe-Timing ist falsch, wenn die Standardausgabe (Fehlerausgabe) in eine Datei in Python konvertiert wird
Geben Sie Notizen zu Python-Skripten ein, um das PyTorch-Modell in C ++ mit libtorch auszuführen
So konvertieren / wiederherstellen Sie einen String mit [] in Python
Führen Sie regelmäßig ein Python-Skript mit cron in einer venv-Umgebung aus
So fügen Sie HDA Hilfe hinzu (mit Python-Skriptbonus)
Erklären Sie ausführlich, wie Sie mit Python einen Sound erzeugen
Erstellen Sie mit PyInstaller eine exe-Datei, die in einer Windows-Umgebung ohne Python funktioniert
So führen Sie Tests zusammen mit Python unittest aus
Ein Memorandum zum Ausführen eines Python-Skripts in einer Bat-Datei
Konvertieren Sie das Bild in .zip mit Python in PDF
Ich war süchtig danach, 2020 mit Selen (+ Python) zu kratzen
Vorbereiten der Steuerung von Nashornobjekten mit Skripten in Grasshopper / Python
Ich möchte mit einem Roboter in Python arbeiten.
Es ist einfach, SQL mit Python auszuführen und das Ergebnis in Excel auszugeben
Ein Skript, das bis zu 5 Sekunden zählt und in Blenders Python stoppt
Dem Schlüssel F12 wurde ein Gerüstmakro in einer Python-Skriptdatei zugewiesen
Immerhin ist es falsch, mit Python-Subprozess zu katzen.
So testen Sie, ob die Ausnahme in Python unittest ausgelöst wird
[Road to Intermediate Python] Installieren Sie Pakete in großen Mengen mit pip
So extrahieren Sie einen Termin in Google Kalender mit Python
So implementieren Sie Python EXE für Windows mit Docker-Container
Einführung in die Effektüberprüfung Schreiben der Kapitel 4 und 5 in Python
Vorsichtsmaßnahmen bei der Verwendung von Python mit AtCoder
Dinge, die Sie bei der Verwendung von CGI mit Python beachten sollten.
So melden Sie sich mit Python bei AtCoder an und senden automatisch
Bis die von Flask + MySQL erstellte API in Docker konvertiert wird
Stellen Sie mit Python eine Verbindung zu BigQuery her
Schaben mit Selen in Python
So löschen Sie stdout in Python
Betreiben Sie LibreOffice mit Python
Schaben mit Chromedriver in Python
POST json mit Python 3-Skript
Debuggen mit pdb in Python
Melden Sie sich auf der Website in Python an
Post to Slack mit Python 3
Umgang mit Sounds in Python
Scraping mit Selen in Python
Scraping mit Tor in Python
Tweet mit Bild in Python
Kombiniert mit Ordnungszahl in Python
Sprechen mit Python [Text zu Sprache]