2017-08-05 115 views
0

我的公司正在從Python 2.7遷移到Python 3.6,並且我試圖安裝cGPolyEncode。但這根本行不通,我得到錯誤返回沒有值的語句當試圖在Python3.6中安裝cgpolyEncode

gpolyencode_py.cpp:187:69: error: ‘Py_InitModule3’ was not declared in this scope 
          "Google Maps Polyline encoding (C extension)"); 
                     ^
    gpolyencode_py.cpp:190:9: error: return-statement with no value, in function returning ‘PyObject* {aka _object*}’ [-fpermissive] 
      return; 
      ^
    error: command 'x86_64-linux-gnu-gcc' failed with exit status 1 

每一次。一些快速的谷歌搜索似乎表明,模塊本身需要重寫,我沒有資格去做。我已經嘗試了安裝python3.6-devlibxml2-dev等的基本知識,但問題依然存在。有沒有解決方法或方法來安裝而不重建它?

回答

0

C擴展名是與python2和python3之間的完全不同。您可以可以然而寫一個滿足兩個使用預處理器的文件。這裏是一個非常基本的C模塊from my github的草圖:

#include <Python.h> 

static PyObject* _hello_world(PyObject* self) { 
    return PyUnicode_FromString("hello world"); 
} 

static struct PyMethodDef methods[] = { 
    {"hello_world", (PyCFunction)_hello_world, METH_NOARGS}, 
    {NULL, NULL} 
}; 

#if PY_MAJOR_VERSION >= 3 
static struct PyModuleDef module = { 
    PyModuleDef_HEAD_INIT, 
    "basic_c_module", 
    NULL, 
    -1, 
    methods 
}; 

PyMODINIT_FUNC PyInit_basic_c_module(void) { 
    return PyModule_Create(&module); 
} 
#else 
PyMODINIT_FUNC initbasic_c_module(void) { 
    Py_InitModule3("basic_c_module", methods, NULL); 
} 
#endif 

注意,#else分支很可能類似於當前有哪些模塊,你需要更新它看起來更像是#if PY_MAJOR_VERSION >= 3分支