ImportError: dynamic module does not define init function (initfizzbuzz)

前端 未结 6 1222
生来不讨喜
生来不讨喜 2020-12-02 17:19

I tried to compile fizzbuzz.c, in order to import it by python. For building fizzbuzz.c,I used python setup.py build_ext -i.

A

6条回答
  •  抹茶落季
    2020-12-02 17:37

    You should define a function named init_fizzbuzz, that should contain the code to initialize the module. This function should also call Py_InitModule, to setup the bindings for the c functions in Python. For further info, check out this tutorial.

    In yor case, your code should be adapted to something like this:

    static PyObject* py_fizzbuzz(PyObject* self, PyObject* args)
    {
        int value;
        if (!PyArg_ParseTuple(args, "i", &value))
            return NULL;
        for (int i=1; i <= n; i++){
            if (i % 3 == 0 && i % 5 ==0){
                printf("fizzbuzz %d \n", i);
                }
            else if (i % 3 == 0){
                printf("fizz %d \n", i);
                }
            else if(i % 5 == 0){
                printf("buzz %d \n", i);
                }
            }
    
        // Return value.
        return Py_BuildValue("i", 0);
    
    }
    
    // Mapping between python and c function names. 
    static PyMethodDef fizzbuzzModule_methods[] = {
        {"fizzbuzz", py_fizzbuzz, METH_VARARGS},
        {NULL, NULL}
        };
    
    // Module initialisation routine.
    void init_fizzbuzz(void)
    {
        // Init module.
        (void) Py_InitModule("fizzbuzz", fizzbuzzModule_methods);
    
    }
    

提交回复
热议问题