我的 Cython 有什么问题?
What's wrong with my Cython?
我试图围绕 C++ 库编写一个 Cython 包装器 http://primesieve.org/
它包装了一个函数count
。到目前为止,它安装正确 python setup.py install
,但是当我 import primesieve
时,函数 primesieve.count
丢失了。有什么想法吗?
primesieve.pxd(继 http://docs.cython.org/src/tutorial/clibraries.html)
cdef extern from "stdint.h":
ctypedef unsigned long long uint64_t
cdef extern from "primesieve/include/primesieve.h":
uint64_t primesieve_count_primes(uint64_t start, uint64_t stop)
primesieve.pyx
cimport primesieve
cpdef int count(self, int n):
return primesieve.primesieve_count_primes(1, n)
setup.py
from setuptools import setup, Extension
from Cython.Build import cythonize
setup(
ext_modules = cythonize([Extension("*", ["primesieve.pyx"], include_dirs = ["primesieve/include"])])
)
通过向 Extension
构造函数的参数添加 libraries = ["primesieve"]
来针对 libprimesieve.so
将 setup.py
修改为 link。没有它,您将收到此错误:
ImportError: ./primesieve.so: undefined symbol: primesieve_count_primes
一旦我改变了 setup.py
,它对我有用:
$ python2 setup.py build
...
$ (cd build/lib.linux-x86_64-2.7 && python2 -c 'import primesieve; print primesieve.count(None, 5)')
3
我试图围绕 C++ 库编写一个 Cython 包装器 http://primesieve.org/
它包装了一个函数count
。到目前为止,它安装正确 python setup.py install
,但是当我 import primesieve
时,函数 primesieve.count
丢失了。有什么想法吗?
primesieve.pxd(继 http://docs.cython.org/src/tutorial/clibraries.html)
cdef extern from "stdint.h":
ctypedef unsigned long long uint64_t
cdef extern from "primesieve/include/primesieve.h":
uint64_t primesieve_count_primes(uint64_t start, uint64_t stop)
primesieve.pyx
cimport primesieve
cpdef int count(self, int n):
return primesieve.primesieve_count_primes(1, n)
setup.py
from setuptools import setup, Extension
from Cython.Build import cythonize
setup(
ext_modules = cythonize([Extension("*", ["primesieve.pyx"], include_dirs = ["primesieve/include"])])
)
通过向 Extension
构造函数的参数添加 libraries = ["primesieve"]
来针对 libprimesieve.so
将 setup.py
修改为 link。没有它,您将收到此错误:
ImportError: ./primesieve.so: undefined symbol: primesieve_count_primes
一旦我改变了 setup.py
,它对我有用:
$ python2 setup.py build
...
$ (cd build/lib.linux-x86_64-2.7 && python2 -c 'import primesieve; print primesieve.count(None, 5)')
3