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.
ModuleNotFoundError: Kein Mudule mit dem Namen 'pkg_resources.py2_warm'. [8352] Skript pyi_rth_pkgres konnte nicht ausgeführt werden
)Windows 10 Anaconda3 4.8.2 Python 3.6.5 PyInstaller 3.6
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.
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)
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)
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. )
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.
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/
|- ~~~
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.
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.
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.
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.
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.
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