Ich versuche, von der Verwendung von Pycimport zum Aufbau über Distutils zu konvertieren, und ich bin durch die seltsamen Entscheidungen ratlos, die es auf macht Wohin mit den .so-Dateien. Also habe ich beschlossen, das Tutorial aus dem Cython-Dokument zu erstellen, nur um zu finden, dass es eine Nachricht ausgibt, die sein Gebäude sagt, aber nicht tut. Ich bin in einem virtualenv, und Cython, Python2.7, usw. sind alle darin installiert.Cython Build über setup.py macht falsche Sache (setzen alle .so Dateien in extra src dir)
Zuerst werden die Grundlagen:
$ cython --version
Cython version 0.21.2
$ cat setup.py
from distutils.core import setup
from Cython.Build import cythonize
print "hello build"
setup(
ext_modules = cythonize("helloworld.pyx")
)
$ cat helloworld.pyx
print "hello world"
Nun, wenn ich es bauen sieht alles ok mit Ausnahme der zusätzlichen src/src Sachen in der Ausgabe:
$ python setup.py build_ext --inplace
hello build
Compiling helloworld.pyx because it changed.
Cythonizing helloworld.pyx
running build_ext
building 'src.helloworld' extension
x86_64-linux-gnu-gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.7 -c helloworld.c -o build/temp.linux-x86_64-2.7/helloworld.o
creating /home/henry/Projects/eyeserver/dserver/src/src
x86_64-linux-gnu-gcc -pthread -shared -Wl,-O1 -Wl,-Bsymbolic-functions -Wl,-Bsymbolic-functions -Wl,-z,relro -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -D_FORTIFY_SOURCE=2 -g -fstack-protector --param=ssp-buffer-size=4 -Wformat -Werror=format-security build/temp.linux-x86_64-2.7/helloworld.o -o /home/henry/Projects/eyeserver/dserver/src/src/helloworld.so
Und wenn ich laufe es, es von natürlich scheitert:
$ echo "import helloworld" | python
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named helloworld
Bis ich bewegen die .so aus seiner zusätzlichen src Verzeichnis file:
$ mv src/helloworld.so .
$ echo "import helloworld" | python
Hello world
Was mache ich falsch? Natürlich könnte ich den Build-Prozess veranlassen, alle .so-Dateien zu verschieben, aber das scheint wirklich hacky zu sein.
Ich kann nicht mit 'Python-2.7.6' und' Cython-0.21.2' auf einem OSX-Rechner reproduzieren. – cel
Warum befindet sich Ihre .so-Datei in einem 'src'-Verzeichnis? Woher kam dieses Verzeichnis? Sie erwähnen das nie in Ihrem Setup. – fnl
BTW, auch wenn ich 'helloworld.pyx' in ein" src "-Verzeichnis innerhalb des Projekts verschiebe und die cythonize-Zeile in' setup.py' entsprechend mit 'src/helloword.pyx' ändere, wird immer noch die .so-Datei eingefügt im Basisverzeichnis des Projekts. Ich denke, es muss etwas mehr zu Ihrer Projekteinrichtung gehören. – fnl