Tôi đang cố gắng để chuyển đổi từ sử dụng pyximport để xây dựng thông qua distutils, và tôi đang stumped bởi những lựa chọn kỳ lạ của nó làm cho nơi để đặt các tập tin .so. Vì vậy, tôi quyết định xây dựng hướng dẫn trong tài liệu cython, chỉ để tìm thấy nó in một thông báo nói rằng tòa nhà của nó, nhưng không phải. Tôi đang ở trong một virtualenv, và cython, python2.7, vv được cài đặt trong đó.cython xây dựng thông qua setup.py không điều sai (đặt tất cả các tập tin .so trong src dir thêm)
Đầu những điều cơ bản:
$ 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"
Bây giờ Khi tôi xây dựng nó tất cả mọi thứ trông ok ngoại trừ những thứ src/src thêm trong đầu ra:
$ 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
Và khi tôi chạy nó, nó của Tất nhiên không:
$ echo "import helloworld" | python
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named helloworld
Cho đến khi tôi di chuyển .so nộp ra khỏi thư mục src phụ của nó:
$ mv src/helloworld.so .
$ echo "import helloworld" | python
Hello world
Tôi đang làm gì sai? Rõ ràng tôi có thể làm cho quá trình xây dựng di chuyển tất cả các tệp .so, nhưng điều đó có vẻ thực sự bị hack.
Tôi không thể sao chép bằng 'python-2.7.6' và' cython-0.21.2' trên máy osx. – cel
Tại sao tệp .so của bạn nằm trong thư mục 'src'? Thư mục đó đến từ đâu. Bạn không bao giờ đề cập rằng trong thiết lập của bạn. – fnl
BTW, ngay cả khi tôi di chuyển 'helloworld.pyx' vào thư mục" src "bên trong dự án và thay đổi dòng cythonize trong' setup.py' tương ứng bằng cách sử dụng 'src/helloword.pyx', nó vẫn đặt tệp .so trong thư mục cơ sở của dự án. Tôi nghĩ rằng phải có một cái gì đó nhiều hơn để thiết lập dự án của bạn. – fnl