2013-06-04 13 views
5

Ich erhalte die gleichen Fehler dieser anderen zwei Fragen: ImportError: dynamic module does not define init function, but it does und Cython compiled C extension: ImportError: dynamic module does not define init functionWas ist die Init-Funktion eines dynamischen Moduls in Python?

Aber ihre Lösungen nicht gleich sind, und nicht so gut für mich arbeiten.

Ich versuche Funktionen einer gemeinsam genutzten Bibliothek, die ich in c geschrieben habe, in meinem Python-Programm aufzurufen.

ich meine gemeinsamen lib wie folgt zusammengestellt:

gcc -shared -Wl,-soname,playfaircrack.so -o playfaircrack.so -fPIC playfaircrack.c scoreText.o 

ich ein Modul erstellt, und in diesem Modul laden ich diese lib mit:

cracker = ctypes.cdll.LoadLibrary('./playfaircrack.so') 

Aber wenn ich den Code ausführen, bekomme ich der folgende Fehler:

Traceback (most recent call last): 
    File "playfair.py", line 2, in <module> 
    import playfaircrack 
ImportError: dynamic module does not define init function (initplayfaircrack) 

Das ist sehr seltsam, denn wenn ich den Python-Interpreter ausführen, und rufe dir ectly:

cracker = ctypes.cdll.LoadLibrary('./playfaircrack.so') 

Ich kann auf die Funktionen meiner freigegebenen Bibliothek zugreifen.

Irgendwelche Ideen, um das zu lösen? Danke.

Antwort

2

die Linie

import playfaircrack 

in playfair.py löschen und es sollte funktionieren.

Alternativ umbenennen Sie playfaircrack.so zu etwas anderem oder verschoben es in ein anderes Verzeichnis. Python wird verwirrt, wenn Sie zwei Dateien mit demselben Modulnamen haben, d. H. playfaircrack.py und playfaircrack.so im selben Verzeichnis. Python versucht, playfaircrack.so, das kein gültiges Python-Modul ist, zu importieren, bevor es playfaircrack.py erreicht.

+0

Gut. Ich kann das einfach nicht machen, weil playfair das Hauptprogramm ist, und playfaircrack ist ein Modul, das aus dem Hauptprogramm aufgerufen wird. –

+0

Die Antwort wurde aktualisiert. Zwei Module mit demselben Namen funktionieren nicht. –

+0

So etwas ist mir noch nie vorgekommen. Es funktionierte. Vielen Dank :) –

Verwandte Themen