Pyinstaller, der opencv von Windows 10 auf Windows 10 verteilt, wobei ucrt dlls api-ms-win-crt fehlt

8

Ich habe ein Python 3.5 64-Bit-Programm (erforderlich für Tensorflow für Windows), das OpenCV verwendet. Ich verteile es mit pyinstaller.

Ich habe mein Programm mit Windows 10 erstellt

%Vor%

Auf meinem Computer wird die .exe erstellt und läuft perfekt. Auf anderen Nicht-Windows 10-Computern

Ein

%Vor%

Gibt

zurück
  

ImportError: Laden der DLL fehlgeschlagen: Das angegebene Modul konnte nicht gefunden werden.

Ich kann eine Menge darüber auf dem pyInstaller-Thread sehen, aber ich kann nicht sagen, wie ich es in die Praxis umsetzen soll. Dependency Walker sagt, dass ich eine Reihe von DLLs vermisse

%Vor%

Okay, von den pyInstaller-Threads weiß ich, dass diese DLLs existieren

%Vor%

Unter mehreren Unterordnern basierend auf Architektur.

Ich habe versucht, meine .spec-Datei hinzuzufügen

%Vor%

Oder für meine besondere Architektur

%Vor%

Was ich dachte, wurde vorgeschlagen hier

  

"Installieren Sie das Windows Software Development Kit (SDK) für Windows 10 und   Erweitern Sie die .spec-Datei, um die erforderlichen DLLs einzubinden, siehe "Verteilen   Software, die den Universal CRT "in dem oben genannten Link verwendet,   Nummer 6. "

Das hatte keine Wirkung. Ich bekomme Hunderte von Fehlern wie

%Vor%

Aber ich kann diese DLL hier sehen

%Vor%

Also habe ich posthoc den ganzen Ordner buchstäblich kopiert

%Vor%

Aber es ist nicht klar, wie man diese mit dem .exe verbindet. Es ist klar, pyInstaller vorher zu wissen, ist vorzuziehen.

Ich habe es auch versucht

%Vor%

Und es hat sie immer noch nicht gefunden

Ich habe auch versucht, diesen Ordner zu PATH hinzuzufügen. Irgendwelche Ideen?

    
bw4sz 26.09.2017, 00:51
quelle

3 Antworten

1

Ich muss das selbst tun, aber noch nicht. Ich werde versuchen, meine vollständige Lösung zu veröffentlichen, wenn ich es tue. In der Zwischenzeit ...

Ich denke, Sie müssen möglicherweise ausdrücklich verlangen, dass sie einbezogen werden, anstatt nur den Suchpfad zu erweitern.

Ссылка

Wahrscheinlich verwenden sie die Klasse Tree , die sie erwähnen, um alle Dateien für Sie zu sammeln.

Ссылка

    
altendky 26.09.2017 14:11
quelle
1

Wenn Sie Ihre Spezifikationsdatei zur Verfügung gestellt hätten, könnte ich sehen, was vor sich geht. Von hier ist es wahrscheinlich, dass Sie keine Dateien enthalten.

Von hier aus gibt es zwei Methoden:

  1. Erstellen Sie "eine" einzelne Datei, die alle DLLs, Pyd-Dateien und mehr enthält ... eine große exe-Datei als Ergebnis.
  2. Der andere Weg ist, es als Datei + Ordner mit DLL-Dateien gefüllt, etc ... Sie erhalten eine kleine exe-Datei.

Überprüfen Sie Binärdateien (inkl. DLL) hier pininstaller Dokumentation über das manuelle Einbinden von Dateien.

Überprüfen Sie Dateien hier hinzufügen die pyinstaller-Dokumentation über die Aufnahme von Dateien manuell.

Eine Beispielspezifikationsdatei, die DLL-Dateien aus Ihrem DLL-Ordner enthält.

block_cipher = None a = Analysis(['minimal.py'], pathex = ['/Developer/PItests/minimal'], binaries = [ ( 'C:\Program Files (x86)\Windows Kits\Redist\ucrt\DLLs', '.' ) ], datas = [ ('helpmod/help_data.txt', 'helpmod' ) ], hiddenimports = [], 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(...)

    
ZF007 14.02.2018 22:26
quelle
1

Ich habe gesehen, dass PyInstaller und Py2exe unzählige Male keine dlls aufnehmen konnten. Persönlich verpacke ich meine Verwendung von ihnen in Batch oder Bash aus einer Reihe von Gründen, um zu erweitern, was sie tun. Logisch sehe ich ein Argument für das Wrapping sie in PY-Skripte selbst ...

Wie auch immer, es ist vielleicht einfacher, die Abhängigkeiten einfach durch ein Wrapper-Skript in Ihr Installationspaket zu kopieren, anstatt damit zu kämpfen.

Normalerweise erhalten Sie einen dll fehlenden Fehler, wenn Sie versuchen, etwas zu starten, das es fehlt. Fügen Sie jede Datei manuell zum Verzeichnis hinzu und notieren Sie, was Sie selbst benötigen. Dann schreibe das.

    
BuvinJ 14.02.2018 23:37
quelle

Tags und Links