Heim >Backend-Entwicklung >Python-Tutorial >Warum erhalte ich die Fehlermeldung „Kein Modul benannt', wenn ich die Option --onefile von PyInstaller verwende?
PyInstaller, Spec-Datei, kein Modul benannt
Einführung
Beim Erstellen eines Python-Skripts Bei PyInstaller kann es zu der Fehlermeldung „Kein Modul benannt“ kommen. Dieser Fehler weist darauf hin, dass ein erforderliches Modul nicht in Ihrer ausführbaren Datei enthalten ist.
Problem
In diesem speziellen Fall tritt der Fehler auf, wenn die Option --onefile verwendet wird Erstellen Sie eine einzelne ausführbare Datei. Die von PyInstaller generierte Datei myscript.spec enthält nicht alle erforderlichen Module, was zum Fehler „Kein Modul benannt“ führt.
Lösung
Option 1: Dynamische Importe
Wenn Ihr Code dynamische Importe enthält (d. h. Module, die zur Laufzeit importiert werden), kann PyInstaller diese möglicherweise nicht automatisch einbinden. Um sicherzustellen, dass diese Module enthalten sind, können Sie nicht verwendete Importe davon in Ihren Code einfügen:
import mysql # Unused import import urllib2 # Unused import
Option 2: Explizites Einschließen
Wenn Sie dies nicht möchten Wenn Sie ungenutzte Importe hinzufügen, können Sie PyInstaller anweisen, die erforderlichen Module explizit einzuschließen. Fügen Sie in Ihrer myscript.spec-Datei die folgende Zeile im Abschnitt „Analyse“ hinzu:
binaries = [('mysql.so', '.') ...] # Include the MySQL library
Wiederholen Sie diesen Schritt für alle anderen fehlenden Module.
Hinweis zu --onefile
Die Option --onefile hat keinen Einfluss auf die Funktionalität Ihrer ausführbaren Datei. Es packt lediglich alle von PyInstaller erstellten Zwischendateien in die ausführbare Datei, die dann in ein temporäres Verzeichnis entpackt werden, wenn die ausführbare Datei ausgeführt wird.
Das obige ist der detaillierte Inhalt vonWarum erhalte ich die Fehlermeldung „Kein Modul benannt', wenn ich die Option --onefile von PyInstaller verwende?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!