[PYTHON] Informationen zu Fehlern bei der Installation und Ausführung von PyInstaller

Was ist PyInstaller?

PyInstaller ist ein großartiges Tool, mit dem Sie Ihr Python-Skript (.py) in eine ausführbare Datei (.exe) konvertieren können. Als praktisches Beispiel habe ich tatsächlich erlebt, "** Ich möchte ein automatisches Analysetool verwenden, das in Python an einem gemeinsamen Forschungsziel (ohne Python-Umgebung) erstellt wurde. **" Es war ein ausgezeichnetes Werkzeug, um den Wunsch nach Spaß zu erfüllen. In diesem Artikel möchte ich PyInstaller verwenden, aber es wird ein Fehler ausgegeben. Der Zweck besteht darin, ein Hilfsschiff an diejenigen zu senden, die auf der Straße verloren sind. Informationen zur Verwendung von PyInstaller finden Sie in den folgenden Artikeln, auf die ich tatsächlich verwiesen habe.

Hier werde ich erklären, wie ich jeden der drei Fehler vermeiden kann, auf die ich mich wirklich eingelassen habe. Der Zweck besteht nicht darin, die Fehlerursache zu klären, sondern eine exe-Datei mit ** PyInstaller ** zu generieren, sodass wir die Fehlerursache nicht eingehend betrachten. Wenn Sie mehr wissen möchten, geben Sie bitte Englisch.

Drei Suchtfehler

  1. PyInstaller kann überhaupt nicht installiert werden
  2. Die exec-Funktion funktioniert nicht, wenn die exe-Datei ausgeführt wird (ModuleNotFoundError: Kein Mudule mit dem Namen 'pkg_resources.py2_warm'. [8352] Skript pyi_rth_pkgres konnte nicht ausgeführt werden)
  3. Ich weiß nicht (`qt.qpa.plugin: Das Qt-Plattform-Plugin" windows "konnte in" "nicht gefunden werden. Diese Anwendung konnte nicht gestartet werden, da kein Qt-Plattform-Plugin initialisiert werden konnte. Eine Neuinstallation der Anwendung kann dieses Problem beheben." )

Umgebung

Windows 10 Anaconda3 4.8.2 Python 3.6.5 PyInstaller 3.6

1. Problem "PyInstaller kann nicht installiert werden"

Das war sehr schwierig. Abschließend ** nicht gelöst **. Nur wenige Menschen sind von diesem Fehler abhängig und haben ihn behoben. Es ist ein Sumpf, dem man nur schwer entkommen kann.

Befehl zum Installieren

pip install pyinstaller
(Dies wird empfohlen, aber ich habe "conda install pyinstaller" verwendet, als ich es schließlich installiert habe. Bitte versuchen Sie, welches besser ist, wenn Sie eine Umgebung mit anaconda erstellen Letzteres wird empfohlen)

Welche Art von Fehler ist aufgetreten?

Ich habe die Details des Fehlers zu diesem Zeitpunkt nicht aufgeschrieben, aber ich erinnere mich ungefähr daran, dass sich ** "setuptools" ziemlich schlecht verhalten haben ** (wie "erfüllt die Anforderungen setuptools"). Inhalt)

Durchbruch

Endlich ist die Installation jetzt im Gange. Wie hast du das gemacht?

(Im Detail hatte ich die Installation von PyInstaller vorerst aufgegeben. Ich konnte den Fehler nicht vermeiden und meine Arbeit nicht fortsetzen. Ich antwortete sofort mit einer Batch-Datei. Ich musste Seaborn an einem Ort aktualisieren, der nichts damit zu tun hat. Ich kann es jedoch nicht aktualisieren. Die Umgebung ist zu schmutzig. Schmutzig bedeutet, dass Pip und Conda gemischt sind. Die Umgebung ist zusammengebrochen. Also habe ich versucht, die Umgebung nur mit conda neu zu erstellen (Docker scheint problematisch zu sein, wenn es sich um Windows handelt, also habe ich es gestoppt) und eine neue virtuelle Umgebung "conda create --name makeexe python == 3.6" gestartet. Zu diesem Zeitpunkt war "pip install pyinstaller" nicht erfolgreich. Möglicherweise kann ** pyinstaller nicht mit pip in der Anaconda-Umgebung installiert werden **. Ich habe die minimal erforderlichen Pakete installiert (conda install numpy pandas seaborn matplotlib tqdm opencv kissen). Danach dachte ich plötzlich darüber nach, Pyinstaller über conda conda install pyinstaller zu installieren, und es kam schnell herein. Ich rufe an, Cousin. )

Was war das Problem?

Ich kenne die Details nicht, aber ich denke, es war ein Fehler **, überhaupt über Pip in die Anaconda-Umgebung zu gelangen. Als Ergebnis Theorie. Mischen Sie Pip nicht in der Conda-Umgebung, es bedeutet, die Zerstörung der Umwelt zu verbieten. Ich war mir dessen sehr bewusst. Stellen Sie nach Möglichkeit sicher, dass die Bibliothek, die Sie installieren möchten, in conda verfügbar ist. Wenn du kannst, lass es uns dort tun. Das ist sicherer.

2. Problem "Die exec-Funktion funktioniert beim Ausführen der exe-Datei nicht"

PyInstaller-Ausführungsbefehl

Zunächst war die Installation von PyInstaller erfolgreich und ich konnte sie ausführen. Nachdem Sie in das Verzeichnis gewechselt sind, in dem Sie PyInstaller anwenden möchten (um daraus eine Exe-Datei zu machen), führen Sie den folgenden Befehl aus, um daraus eine Exe-Datei zu machen (kombinieren Sie mit --onefile die Module zu einer Exe-Datei; die Ausgabedatei ist eine Exe-Datei. Nur).

$ cd ~~~ # main.Wechseln Sie in das Verzeichnis, in dem sich py befindet
$ pyinstaller main.py --onefile

Die Struktur des Verzeichnisses ist zu diesem Zeitpunkt wie folgt. Durch Ausführen von Pyinstaller werden zwei neue Verzeichnisse "build" und "dist" erstellt und "dist / main.exe" und die ausführbare Datei generiert. Durch Doppelklicken wird das Programm von main.py ausgeführt. Nun, ich werfe einen Fehler. Haha

./
|
|- main.py (Programm erstellt)
|- config.json (main.Konfigurationsdatei von py gelesen)
|- main.spec (erstellt mit pyinstaller)
|- main.exe (erstellt im Verzeichnis dist mit pyinstaller, installiert im selben Verzeichnis wie config, um den Code zu vereinfachen)
|- dist/
|    |- main.exe
|
|- build/
     |- main/
          |- ~~~

Was für einen Fehler hast du bekommen?

Als ich die generierte main.exe ausführte, bekam ich den folgenden Fehler.

Traceback (most recent call last):
  File "site-packages\PyInstaller\loader\rthooks\pyi_rth_pkgres.py", line 13, in <module>
  File "C:\ProgramData\Anaconda3\envs\(venv you made)\lib\site-packages\PyInstaller\loader\pyimod03_iimporters,py", line 623, in exec_module
    exec(bytecode, module.__dict__)
  File "site-packages\pkg_resources\__init__.py", line 86, in <module>
ModuleNotFoundError: No mudule named 'pkg_resources.py2_warm'
[8352] Failed to execute script pyi_rth_pkgres

Ich kann exec nicht ausführen, ich schreie, dass ich nicht die pkg_resources.py2_warm habe, die zum Ausführen benötigt wird.

Lösung

Lesen Sie hier und fügen Sie das Modul "ModuleNotFoundError" zu "hiddenimports" in der Datei "main.spec" hinzu, die bei der Ausführung von PyInstaller generiert wird. Hinzufügen.

-              hiddenimports=[],
+              hiddenimports=['pkg_resources.py2_warn'],

Verwenden Sie dann ** diese Spezifikationsdatei ** und erstellen Sie erneut eine Exe-Datei mit PyInstaller (Derzeit ist es in Ordnung, andere Dateien als die Spezifikationsdatei wegzuwerfen. Lassen Sie uns sie also wegwerfen. , Es verursacht Probleme wie Fehler und das Überschreiben). Führen Sie es mit dem folgenden Befehl aus. pyinstaller main.spec --onefile
Dadurch werden keine Fehler mehr über das exec-Modul ausgegeben.

3. Problem "Ich weiß es nicht, aber ich muss mich übergeben"

Durch die frühere Verwendung der Datei main.spec konnte ich den Fehler im Zusammenhang mit dem exec-Modul vermeiden. Aber als ich lief, warf es immer noch einen Fehler. Mal sehen, was für ein Fehler es war. Ich nenne das übrigens "Ich verstehe Fehler nicht", weil ich nicht genug Wortschatz habe. Nun, es ist leicht zu verstehen.

Was für einen Fehler hast du bekommen?

C:\ProgramData\Anaconda3\envs\(venv you made)\lib\site-packages\PyInstaller\loader\pyimod03_iimporters,py:623:MatplotlibDeprecationWarning:
THEMATPLOTLIBDATA environment variable was deprecated in Matplotlib 3.1 and will be removed in 3.3.
  exec(bytecode, module.__dict__)
2020/03/27 10:29:55 - complete to load config.json (Ab hier absichtliche Ausgabe im Programm)
~(Unterlassung)~
2020/03/27 10:30:14 - success affine transforming.
qt.qpa.plugin: Could not find the Qt platform plugin "windows" in ""
This application failed to start because no Qt platform plugin could be initialized. Reinstalling the application may fix this problem.

Die erste Nachricht stammt ebenfalls von exec, ist auf "hiddenimport" gesetzt und wird bearbeitet. Das Folgende dient zur Ankündigung des Programmfortschritts, ist also in Ordnung (eine Nachricht, die absichtlich im Programm ausgespuckt wird). Ein neuer Fehler im Zusammenhang mit "qt.qpa.plugin" trat zum Zeitpunkt der Affine-Konvertierung auf. Ich frage mich, ob die Plattform nicht installiert werden kann. Ich bin mir nicht sicher, was los ist.

Lösung

Frage an stackoverflow gestellt Wenn Sie jedoch einen Teil extrahieren,

There seem to be two solutions, the first one worked fine for me:

  • copy platform directory to directory of your executable. You'll find the platform directory at a location like c:\Users\<username>\envs\<environmentname>\Library\plugins\platforms or
  • Upgrade to a newer version of pyqt: conda install -c anaconda pyqt

Use the second option with care: Do not try to use pip for pyqt installation if you have a conda environment, this might break your conda installation: https://github.com/ContinuumIO/anaconda-issues/issues/1970

Wann,

I had an issue where my python code worked fine, but the compiled .exe file would provide the "could not find or load the Qt platform plugin windows" problem. I fixed the problem by copying the ~PyQt5\Qt\plugins\platforms folder from the program's directory, generated by using pyinstaller --onedir main.py, to the folder holding the .exe file.

It seems that in my case the only way "helping" my program detect the required .dlls was having the platforms folder next to the main.exe. Pasting the platforms folder to the program's directory after using pyinstaller --onefile main.py also makes the program work.

ist. Wie erwartet handelt es sich um einen Stapelüberlauf. Die Antwort auf das, was Sie lösen möchten, ist bereits aus. Toll. Zuerst habe ich "pyqt" als etwas installiert, das ich zu einem vernünftigen Preis ausprobieren konnte. Der Befehl lautet conda install -c anaconda pyqt

Es hat sich jedoch nicht verbessert. Was ist der Stapelüberlauf? Ist es so Es gibt mir keine Chance, mich hineinzuquetschen, die nächste Idee wurde bereits gezeichnet, oh, ich kann den Stapelüberlauf nicht schlagen.

Also habe ich eine Kopie des Plattformverzeichnisses erstellt, das als andere Methode empfohlen wird. Die Plattform befindet sich unter "C: \ ProgramData \ Anaconda3 \ envs \ (von Ihnen erstellt) \ Library \ plugins \ platform" (in meinem Fall kann sie für jede Person unterschiedlich sein, aber es war auch ein anderer Pfad in der Antwort im Stapelüberlauf). .. Kopieren Sie dieses Plattformverzeichnis in dasselbe Verzeichnis wie die exe-Datei, die Sie ausführen möchten. Mit anderen Worten, die endgültige Ordnerstruktur sieht folgendermaßen aus ⇓

./
|
|- main.py (Programm erstellt)
|- config.json (main.Konfigurationsdatei von py gelesen)
|- main.spec (erstellt mit pyinstaller, versteckte inports'pkg_resources.py2_warn'Hinzugefügt)
|- main.exe (erstellt im Verzeichnis dist mit pyinstaller, installiert im selben Verzeichnis wie config, um den Code zu vereinfachen)
|- platforms/(Hier kopieren und einfügen)
|   |
|   |- qdirect2d.dll
|   |- qminimal.dll
|   |- qoffscreen.dll
|   |- qwebgl.dll
|   |- qwindows.dll
|- dist/
|    |- main.exe
|
|- build/
     |- main/
          |- ~~~

Wenn Sie die exe-Datei in diesem Zustand ausführen (eine Neuerstellung sollte nicht erforderlich sein), wird die exe-Datei bis zum Ende normal ausgeführt! !! !! !! Wenn die exe-Datei einen Fehler auslöst, versuchen Sie es erneut.

Am Ende

Ich möchte PyInstaller verwenden, erhalte jedoch eine Fehlermeldung. Ich glaube, ich erhalte verschiedene Fehler. Es gibt keinen Artikel, der diese Fehler zusammenfasst. Ich verstand nicht gut und wurde herumgeschwenkt. Die grundlegende Lösung bestand also darin, "conda install" zu verwenden. Ich bin mir nicht sicher. Aber PyInstaller ist nützlich. Weil es PCs (und Gehirne) gibt, die Programmiersprachen nicht so gut installieren können wie Python, weil sie weltweit vom Netz getrennt sind. Der Nachteil dabei ist jedoch, dass ** die generierte exe-Datei sehr schwer ist **. Zumindest können Sie es im Gegensatz zu Skripten nicht einfach per E-Mail versenden. Ich denke, es gibt immer noch verschiedene Fehler. Bitte benutzen Sie diesen Artikel. Wenn Sie in die Kommentare schreiben, fügen wir diesem Artikel auch eine Problemumgehung für diesen Fehler hinzu. Ich möchte zusammen ein Handbuch für PyInstaller-Fehler-Gegenmaßnahmen erstellen.

Danke fürs Lesen. Auf Wiedersehen

Recommended Posts

Informationen zu Fehlern bei der Installation und Ausführung von PyInstaller
Informationen zu Fehlern bei der Installation und Ausführung von PyInstaller
Über _ und __
[PyTorch] So installieren Sie
[Python] Kapitel 01-02 Über Python (Ausführung und Installation der Entwicklungsumgebung)
[Python] Kapitel 01-02 Über Python (Ausführung und Installation der Entwicklungsumgebung)
Zusammenfassung und häufige Fehler zu Cron
PySpark 1.5.2 + Elasticsearch 2.1.0 Installationsverfahren und Ausführung
Über _ und __
Umgang mit Pip und damit verbundenen Installationsfehlern unter Ubuntu 18.04
Über Klasse und Instanz
pytube Ausführung und Fehler
Über Cumprod und Cummax
[Python] Memo Über Fehler
Über Kreuzvalidierung und F-Wert
Ich wollte mich um die Ausführungszeit und die Speichernutzung kümmern