2015-04-15 4 views
9

Ich verwende Python3.4 und ich versuche installieren Sie das Modul Fuzzydynamische Modul nicht init-Funktion (PyInit_fuzzy)

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

Da es erwähnt wird, es funktioniert nur für Python2 definieren, habe ich versucht, es zu konvertieren mit Cython. Dies sind die Schritte, die ich gefolgt:

  1. cython fuzzy.pyx
  2. gcc -g -02 -fpic python-config --cflags -c fuzzy.c -o fuzzy.o
  3. tat das gleiche für double_metaphone.c
  4. gcc -shared -o fuzzy.so fuzzy.o double_metaphone.o python-config --libs

Wenn ich Fuzzy ich einen Fehler habe zu importieren versucht:

dynamic module does not define init function (PyInit_fuzzy) 

Was ist das Problem? Liegt das an der Python2 und Python3 Kollision? Wie löst man das?

+2

Versuchen Sie "python-config" für "python3-config" oder "python3.4-config" zu tauschen? – DavidW

+0

Das hat getan. Vielen Dank. – blackmamba

Antwort

12

Dies wurde mit einem kurzen Kommentar gelöst, aber als Antwort zum Wohl des Gebens eines bisschen mehr Details ...

Die sehr kurze Antwort geschrieben ist, alle Fälle von für python3-config oder python3.4-config zu ersetzen.

Unnötige Detail folgt

OP ein Pyrex-Modul in Python 3 zu verwenden versucht (dies von der Frage nicht besonders klar ist), und daher ist es in Cython Wiederaufbau ist ein vernünftigen Ansatz zu nehmen, da Cython basierte ursprünglich auf Pyrex.

Cython generiert Code, der kompiliert werden sollte, um in Python 2 oder 3 zu funktionieren, abhängig davon, welche Header enthalten sind. generiert relevante Compiler/Linker-Optionen für die Standardversion von Python auf dem System, das zum Zeitpunkt des Schreibens in der Regel Python 2 ist (auf meinem System enthält es -I/usr/include/python2.7 -I/usr/include/x86_64-linux-gnu/python2.7). Daher baut es das Modul für Python 2 auf. Die Verwendung der python3.4-config stellt sicher, dass die richtige Version enthalten ist.

In der Umstellung von Python 2 Python 3 die aufgerufene Funktion, wenn C-Module importiert wurde init<modulename>-PyInit_<modulename> geändert, vermutlich um sicherzustellen, dass Sie nur Importmodule für die korrekte Version gebaut werden. Wenn das Modul mit Python 2 erstellt wird, erstellt es daher nur initfuzzy und daher PyInit_fuzzy beim Importieren nicht gefunden.