ERROR - DLL load failed while importing _rust

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
mrrockkz
User
Beiträge: 12
Registriert: Donnerstag 2. März 2023, 15:24

Hallo liebe Python-Forum-User,

ich habe mein erstes "Programm" in PyCharm geschrieben. Eher durch Copy&Paste und viel zusammensuchen als wirklich programmieren. Ich hoffe ihr seht es mir nach, dass ich die Variante "Learning by doing" gewählt habe.
Das Programm ist ein GUI-Programm zur Verschlüsselung von HEVC-Dateien im MP4-Container. Es verwendet die Python-Bibliotheken tkinter, hashlib und cryptography.

Das GUI hat fünf Hauptkomponenten:

- Input-Dateiauswahl
- Passworteingabe mit einem Generieren-Button
- Ausgabeordnerauswahl
- Verschlüsselungs-Button
- Fortschrittsbalken

Wenn der Benutzer eine Datei auswählt, wird ihr Pfad in der Variable self.input_file_path gespeichert. Wenn der Benutzer einen Ausgabe-Ordner auswählt, wird der Pfad in der Variable self.output_folder_path gespeichert. Wenn der Benutzer ein Passwort eingibt oder auf die Schaltfläche "Generieren" klickt, wird das Passwort in der Variable self.password gespeichert.

Wenn der Benutzer auf den Verschlüsselungs-Button klickt, wird die encrypt-Methode aufgerufen. Diese Methode überprüft, ob die drei Variablen self.input_file_path, self.output_folder_path und self.password korrekt "befüllt" sind. Wenn eine dieser Variablen leer ist, wird eine Fehlermeldung angezeigt.

Wenn alle Variablen gültige Werte haben, wird das Passwort mit SHA-256 gehasht und in der Variable key gespeichert. Ein zufälliger Initialisierungsvektor wird erzeugt und in der Variable iv gespeichert. Der Name der Ausgabedatei wird aus dem Namen der Eingabedatei und der Erweiterung ".ccv" erzeugt und in der Variablen output_file_name gespeichert.

Die Eingabedatei wird zeilenweise gelesen und in Chunks von 64 KB verschlüsselt. Der verschlüsselte Chunk wird in die Ausgabedatei geschrieben. Die Verschlüsselung erfolgt mit dem AES-Algorithmus im CBC-Modus. Der Initialisierungsvektor wird als Parameter an den CBC-Modus übergeben.

So weit so gut. In PyCharm funktioniert alles wie es soll (außer ein kleiner "Anzeigefehler" wenn das Logging aktiviert ist).

Ich arbeite mit folgenden Modulen:

Code: Alles auswählen

import tkinter as tk
from tkinter import filedialog, messagebox
from tkinter import ttk
import os
import hashlib
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import random
import string
import logging
Wenn ich das Programm mit PyInstaller kompiliere sieht beim Öffnen der EXE alles wunderbar aus, was mich sehr freut für mein erstes Programm.
Jedoch startet der Verschlüsselungsprozess nicht. Es kommt folgender Fehler: ERROR - DLL load failed while importing _rust: Das angegebene Modul wurde nicht gefunden.

Ich kompiliere das Programm mit folgendem Code:

Code: Alles auswählen

pyinstaller --windowed --icon=icon.ico --add-data "img/icon.ico;img" --add-data "venv/Lib/site-packages/cryptography;cryptography" --add-data "venv/Lib/site-packages/cffi;cffi" --add-data "venv/Lib/site-packages/pycparser;pycparser" Encrypter.py
Was für ein Modul könnte noch fehlen? Den Rest übernimmt PyInstaller ja automatisch.

Ich hoffe ihr könnt mir helfen und bedanke mich jetzt schon im voraus für eure Mühen!
mrrockkz
User
Beiträge: 12
Registriert: Donnerstag 2. März 2023, 15:24

Okay. Ich konnte es glücklicherweise selbst lösen.
Falls es jemanden interessiert. Beim Kompilieren der EXE muss man über die Eingabeaufforderung die benötigten Module via pip installieren. Und diese fügt es aber auch nur mit pyinstaller an, wenn man eine main.py umwandelt.
Antworten