Я определил имя моего объекта-оболочки в моем файле c blragUtils.c(я определил методы и много для него в Blargmethods)...
void initBlarg(){
Py_InitModule("Blarg", Blargmethods);
}
Я скомпилировал его так...
blarglib: blargUtils.c
gcc -I/usr/include/python2.6 -fPIC -c blargUtils.c -Wall
gcc -shared blargUtils.o -o blargUtils.so
clean:
rm *.so
Однако, когда я пытаюсь импортировать оболочку в свой python script...
import Blarg
В нем говорится, что он говорит: "ImportError: нет модуля с именем Blarg". Я немного потерялся здесь, и я не понимаю, почему он не может найти класс, когда он является тем же самым орфографическим. Может быть, это логическая ошибка?
Если требуется больше кода, дайте мне знать.
Прежде всего, глядя на комментарии, я вижу, что переименование не сработало. Это означает, что (1) python не может найти файл .so, (2) файл .so не используется (т.е. Не скомпилирован правильно или не все необходимые символы найдены) или (3) есть .py/.pyc/.pyo в том же каталоге, который уже имеет это имя. Если вы уже определили Blarg.py, сначала python будет смотреть на этот файл. То же самое происходит, если у вас есть каталог с именем Blarg в вашем пути поиска. Поэтому, вместо того, чтобы бить головой о стену, попробуйте следующее:
1) Переименуйте вашу .so-библиотеку в нечто гарантированное, чтобы не сталкиваться (т.е. _Blarg)
void initBlarg() {
Py_InitModule("_Blarg", Blargmethods);
}
2) Скомпилируйте его с ИМЯ ИМЯ
gcc -I/usr/include/python2.6 -fPIC -c blargUtils.c -Wall
gcc -shared blargUtils.o -Wl,-soname -Wl,_Blarg.so -o _Blarg.so
3) Создайте оболочку python (т.е. Blarg.py)
import sys
sys.path.append('/path/to/your/library')
import _Blarg
def blargFunc1(*args):
"""Wrap blargFunc1"""
return _Blarg.blargFunc1(*args)
4) Теперь просто используйте его как обычно
import Blarg
Blarg.blargFunc1(1, 2, 3)
Очевидно, это немного перебор, но это должно помочь вам определить, где проблема. Надеюсь, это поможет.