2017-10-20 3 views
1

Ich verwende den folgenden Code:PyInstaller läuft gut, aber exe-Datei Fehler: Kein Modul mit dem Namen, Skript ausführen konnte nicht

pyinstaller --onefile main.py 

main.py wie folgt aussieht:

import sys 
import os 
sys.path.append(r'C:\Model\Utilities') 
from import_pythonpkg import * 

...... 

import_pythonpkg.py wie folgt aussieht:

from astroML.density_estimation import EmpiricalDistribution 
import calendar 
import collections 
from collections import Counter, OrderedDict, defaultdict 
import csv 

.... 

Durch Ausführen der pyinstaller auf main.py, main.exe Datei wurde erfolgreich erstellt.

Aber wenn ich main.exe ausführen gibt es einen Fehler mit astroML. Wenn ich astroML zu main.py von import_pythonpkg.py verschiebe, gibt es keinen Fehler mit astroML. Jetzt bekomme ich einen Fehler mit csv.

das heißt, wenn ich meine main.py ändern aussehen:

import sys 
from astroML.density_estimation import EmpiricalDistribution 
import os 
sys.path.append(r'C:\Model\Utilities') 
from import_pythonpkg import * 

...... 

Der astroML Fehler nicht mehr vorhanden ist, wenn ich main.exe laufen.

Es gibt keinen Fehler mit import calendar Zeile in import_pythonpkg.py überhaupt.

Ich bin mir nicht sicher, wie dieser zufällige Fehler mit Paketen beim Ausführen von main.exe nach pyinstaller ausgeführt wird.

import_pythonpkg bei r'C:\Model\Utilities'

bearbeiten befindet:

Fehler mit main.exe sieht wie folgt, obwohl die ursprüngliche main.py läuft gut. Pyinstaller konnte mich sogar die main.exe ohne Fehler erstellen lassen.

Traceback (most recent call last): 
    File "main.py", line 8, in <module> 
    File "C:\Model\Utilities\import_pythonpkg.py", line 1, in <module> 
    from astroML.density_estimation import EmpiricalDistribution 
ImportError: No module named astroML.density_estimation 
[29180] Failed to execute script main 
+0

haben Sie die genaue Fehlermeldung? – The4thIceman

+0

pyinstaller kann ohne Fehler ausgeführt worden sein, aber es enthält möglicherweise nicht die richtigen Sachen. Gibt es Warnungen? Sie können auch das Protokoll des pyinstaller-Befehls posten, damit wir ein vollständiges Bild davon haben, was passiert. – The4thIceman

Antwort

1

Ich glaube, PyInstaller sieht nicht import_pythonpkg. Nach meiner Erfahrung wird PyInstaller, wenn er zum Pfad hinzufügt oder externe Module und DLLs behandelt, nicht danach suchen, sondern Sie müssen es explizit dazu sagen. Es wird korrekt auf eine .exe kompiliert, weil es es einfach ignoriert, aber dann nicht ausgeführt wird. Überprüfen Sie, ob beim Ausführen Ihres PyInstaller-Befehls Warnungen zu fehlenden Paketen oder Modulen vorhanden sind.

Aber wie man es beheben ... Wenn in der Tat dies das Problem ist (was ich bin nicht sicher, dass es ist) Sie 3 Dinge ausprobieren können:

1) das Paket in Ihr Arbeitsverzeichnis bewegen und vermeiden, mit sys.path.append. Kompilieren Sie dann mit PyInstaller, um zu sehen, ob das funktioniert. Dann wissen Sie, dass pyinstaller import_pythonpkg nicht finden kann. Sie können dort aufhören, wenn das funktioniert.

2) weisen Sie PyInstaller explizit an, dort nachzusehen. Sie können das hidden-import Tag beim Kompilieren mit PyInstaller verwenden, um es wissen zu lassen (geben Sie ihm den vollständigen Pfadnamen).

--hidden-import=modulename 

für weitere Informationen, hier überprüfen: How to properly create a pyinstaller hook, or maybe hidden import?

3) Wenn Sie die Spec-Datei verwenden, die PyInstaller erstellt, können Sie versuchen, eine Variable Gespräch hinzugefügt pathex PyInstaller zu sagen, dass es für Dinge zu suchen:

block_cipher = None 
a = Analysis(['minimal.py'], 
    pathex=['C:\\Program Files (x86)\\Windows Kits\\10\\example_directory'], 
    binaries=None, 
    datas=None, 
    hiddenimports=['path_to_import', 'path_to_second_import'], 
    hookspath=None, 
    runtime_hooks=None, 
    excludes=None, 
    cipher=block_cipher) 
pyz = PYZ(a.pure, a.zipped_data, 
    cipher=block_cipher) 
exe = EXE(pyz,...) 
coll = COLLECT(...) 

weitere Informationen zu spec-Dateien: https://pyinstaller.readthedocs.io/en/stable/spec-files.html

(beachten Sie auch hiddenimports hinzufügen hier)

kann diese Antwort auch als hilfreich erweisen: PyInstaller - no module named

Verwandte Themen