Python Cython问题:未编译cimport libcpp.vector
我正在尝试使用cython来加速我的代码。由于我使用的是字符串数组,所以我想使用C++中的字符串和向量。但是如果我导入c库,编译时会遇到问题。例如,我尝试从这里实现一个示例:。 所以,我的代码是Python Cython问题:未编译cimport libcpp.vector,python,c++,import,cython,Python,C++,Import,Cython,我正在尝试使用cython来加速我的代码。由于我使用的是字符串数组,所以我想使用C++中的字符串和向量。但是如果我导入c库,编译时会遇到问题。例如,我尝试从这里实现一个示例:。 所以,我的代码是 from libcpp.vector cimport vector def primes(unsigned int nb_primes): cdef int n, i cdef vector[int] p p.reserve(nb_primes) # allocate mem
from libcpp.vector cimport vector
def primes(unsigned int nb_primes):
cdef int n, i
cdef vector[int] p
p.reserve(nb_primes) # allocate memory for 'nb_primes' elements.
n = 2
while p.size() < nb_primes: # size() for vectors is similar to len()
for i in p:
if n % i == 0:
break
else:
p.push_back(n) # push_back is similar to append()
n += 1
# Vectors are automatically converted to Python
# lists when converted to Python objects.
return p
之后我得到test_char.c,但没有得到test_char.py。
如果我将使用此代码(不含cimport):
def素数(int nb_素数):
cdef int n,i,len\p
cdef int p[1000]
如果nb_素数>1000:
nb_素数=1000
len_p=0#p中当前的元素数。
n=2
而len_p
好吧。那么,有什么想法吗
from distutils.extension import Extension
extensions = [
Extension("test_char", ["test_char.pyx"]
, language="c++"
)
]
setup(
name="test_char",
ext_modules = cythonize(extensions),
)
它可以解决这个问题错误是什么?@LinuxGeek,控制台关闭得很快,但我没有看到任何正式的错误。但是我希望在运行setup.py之后会出现新文件“test_char.py”,但我没有得到它。如果我删除calllib(第一个字符串),那么我会得到“test\u char.py”。所以,这就是问题所在。您将无法获得
test\u char.py
。您将在Linux上获得test\u char.so
,或者在Windows上获得test\u char.pyd
。你看到了吗?我想你的问题是重复的(但它不是很清楚,不能肯定)@TimRoberts,我看到test_char.py.c。当我编译没有libs的代码时,我看到两个文件:test_char.py.c和test_char.py
def primes(int nb_primes):
cdef int n, i, len_p
cdef int p[1000]
if nb_primes > 1000:
nb_primes = 1000
len_p = 0 # The current number of elements in p.
n = 2
while len_p < nb_primes:
# Is n prime?
for i in p[:len_p]:
if n % i == 0:
break
# If no break occurred in the loop, we have a prime.
else:
p[len_p] = n
len_p += 1
n += 1
# Let's return the result in a python list:
result_as_list = [prime for prime in p[:len_p]]
return result_as_list
from distutils.extension import Extension
extensions = [
Extension("test_char", ["test_char.pyx"]
, language="c++"
)
]
setup(
name="test_char",
ext_modules = cythonize(extensions),
)