2013-06-04 1 views
5

Я получаю ту же ошибку из этих двух вопросов: ImportError: dynamic module does not define init function, but it does и Cython compiled C extension: ImportError: dynamic module does not define init functionЧто такое функция init динамического модуля в python?

Но их решения не равны, и не работает для меня.

Я пытаюсь вызвать функции общей библиотеки, которые я написал в c, внутри моей программы python.

Я собирал мой общий LIB, как это:

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

Я создал модуль, и внутри этого модуля я загружаю эту LIB с:

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

Но когда я запускаю код, я получаю следующая погрешность:

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

Это очень странно, потому что если я запустил python-интерпретатор и позвонил dir ectly:

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

Я могу получить доступ к функциям моей общей библиотеки.

Любые идеи, как это решить? Спасибо.

ответ

2

удалить строку

import playfaircrack 

в playfair.py и он должен работать.

В качестве альтернативы переименуйте playfaircrack.so в другое место или переместите его в другой каталог. Python путается, если у вас есть два файла с тем же именем модуля, то есть playfaircrack.py и playfaircrack.so в том же каталоге. Python пытается импортировать playfaircrack.so, который не является допустимым модулем Python, прежде чем он достигнет playfaircrack.py.

+0

Ну. Я просто не могу этого сделать, потому что playfair - основная программа, а playfaircrack - это модуль, который называется из основной программы. –

+0

Обновлен ответ. Два модуля с одинаковым именем не работают. –

+0

Никогда не было такого, как это для меня. Это сработало. Спасибо :) –

 Смежные вопросы

  • Нет связанных вопросов^_^