2017-08-05 8 views
0

私の会社はPython 2.7からPython 3.6に移行しており、cGPolyEncodeをインストールしようとしています。しかし、これはうまくいきません、私はエラーが発生します値のないreturn文

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のスケッチです:#else分岐は現在のモジュールがあり、あなたがより多くの#if PY_MAJOR_VERSION >= 3

のように見えるためにそれを更新する必要がありますどのように可能性が似ていること

#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 

注意