J'ai utilisé cython pour la première fois. Je suis tombé sur le déplacement d'un simple module, je vais donc le laisser comme une note.
Environnement: Mac OS El Capitan
J'ai fait référence à Learning Cython Programming --Second Edition. Le code est ici.
Dans le livre, j'ai créé un fichier .pyx
, mais j'ai essayé d'utiliser un fichier .py
normal.
cython -o helloworld.c helloworld.py
Puis compilez.
gcc -g -O2 -fpic -c helloworld.c -o helloworld.o `python-config --cflags`
gcc -g -O2 -shared -o helloworld.so helloworld.o `python-config --libs`
Lorsque j'ai importé le fichier .so
créé de cette manière, une erreur de segmentation s'est produite.
Un problème a été signalé sur github pour ce problème, et j'ai changé les options passées à gcc et l'erreur ne s'est pas produite.
gcc -g -O2 -fpic -c helloworld.c -o helloworld.o `python-config --cflags`
gcc -g -O2 -shared -o helloworld.so helloworld.o `python-config --ldflags`
Aussi, dans documentation cython, distutils La procédure d'utilisation est décrite et j'ai pensé que c'était plus simple.
Symbol not found: _PyUnicodeUCS4_Compare
Maintenant que la pratique est terminée, j'ai construit le module que je cible avec cython. Quand j'ai essayé de l'utiliser, j'ai eu une erreur ImportError appelée Symbol not found: _PyUnicodeUCS4_Compare.
Reportez-vous à cet article, supprimez python 2.7.12 installé avec virtualenv et essayez de l'exécuter avec python sur le système Mac. J'ai fait.
Est-ce une question de quel module se lier au moment de la construction? Contrairement au python ordinaire, cython est gênant.
Recommended Posts