Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Cython问题:未编译cimport libcpp.vector_Python_C++_Import_Cython - Fatal编程技术网

Python Cython问题:未编译cimport libcpp.vector

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

我正在尝试使用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 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),
)