im은 c로 작성된 함수를 설치하려고 하지만 ( python3 setup.py install ) 파이썬이 ImportError를 발생 시킵니다 : dynamic module does not define module export function (PyInit_costFunction) error!
costFunction.c :
static PyObject *costFunction(PyObject *self, PyObject *args)
{
return Py_BuildValue("d", 0); // or anything!
}
static PyMethodDef costFunction_methods[] = {
{"costFunction", (PyCFunction)costFunction, METH_VARARGS, "cost function"},
{NULL, NULL, 0, NULL}
};
static struct PyModuleDef costFunctionmodule = {
PyModuleDef_HEAD_INIT,"costFunction", NULL, -1, costFunction_methods
};
PyMODINIT_FUNC PyInit_costFunction(void)
{
return PyModule_Create(&costFunctionmodule);
}
setup.py :
from distutils.core import setup, Extension
setup(name='costFunction', version='1.0', \
ext_modules=[Extension('costFunction', ['costFunction.c'],include_dirs=['include'])])
외부 라이브러리 : tinyexpr
나는 python 3.5.2와 함께 linux mint 18을 사용하고 있습니다.
편집 : python3-dev 버전은 3.5.1-3입니다.
마침내 나는 더러운 속임수를 사용했습니다!
다음을 사용하여 컴파일 된 c 코드 (python.h 및 C의 모든 python 데이터 유형 없음) :
gcc -fPIC -Wall -O3 costFunction.c -o costFunction.so -shared -fopenmp
python ctypes 모듈을 사용하여로드하고 사용했습니다.
dll = ctypes.CDLL("./costFunction.so")
costFunction = dll.cost_function
costFunction.restype = ctypes.c_double
costFunction.argtypes = [ctypes.POINTER(ctypes.c_double), ctypes.c_int]
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다