El módulo dynamic no define la función de inicio (PyInit_fuzzy)

Estoy usando Python3.4 y estoy tratando de instalar el módulo difuso

https://pypi.python.org/pypi/Fuzzy. 

Como se menciona, solo funciona para Python2, traté de convertirlo usando cython. Estos son los pasos que seguí:

  1. cython fuzzy.pyx
  2. gcc -g -02 -fpic python-config --cflags -c fuzzy.c -o fuzzy.o
  3. hizo lo mismo para double_metaphone.c
  4. gcc -shared -o fuzzy.so fuzzy.o double_metaphone.o python-config --libs

Cuando intenté importar fuzzy obtuve un error:

 dynamic module does not define init function (PyInit_fuzzy) 

¿Cual es el problema? ¿Es esto debido al choque de python2 y python3? ¿Cómo resolver esto?

Esto se resolvió con un rápido comentario, pero se publicó como una respuesta para dar un poco más de detalle …

La respuesta muy breve es reemplazar todas las instancias de python-config para python3-config o python3.4-config .

Detalles innecesarios sigue

OP intentaba usar un módulo de Pyrex en Python 3 (esto no está especialmente claro en la pregunta), y por lo tanto, reconstruirlo en Cython es un enfoque sensato, ya que Cython se basó originalmente en Pyrex.

Cython genera código que debe comstackrse para funcionar en Python 2 o 3, según los encabezados que se incluyan. python-config genera opciones relevantes de comstackdor / enlazador para la versión predeterminada de Python en el sistema, que en el momento de la escritura es típicamente Python 2 (en mi sistema incluye -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7 ). Por lo tanto, crea el módulo para Python 2. El uso de python3.4-config asegura que se incluya la versión correcta.

En el cambio de Python 2 a Python 3, la función llamada cuando se importan los módulos C se cambió de init a PyInit_ , probablemente para ayudar a garantizar que solo se puedan importar los módulos creados para la versión correcta. Por lo tanto, cuando el módulo se construye con Python 2, solo crea initfuzzy y, por lo tanto, no encuentra PyInit_fuzzy en la importación.