Пример Cython primes - SyntaxError: недопустимый синтаксис - PullRequest
0 голосов
/ 29 мая 2020

Я изучаю Cython в Linux и работаю, используя пример на страницах учебного пособия Cython:

https://cython.readthedocs.io/en/latest/src/tutorial/cython_tutorial.html#primes

Я изучаю пример простых чисел . У которого есть код:

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

Я сохранил код как primes.pyx и запустил setup.py.

, который выглядит так:

from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules = cythonize("primes.pyx")
)

Однако когда я импортирую простые числа, используя

>>> import primes

, я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/vagrant/merlin/scoleman/test_cython/primes.py", line 1
    def primes(int nb_primes):

У меня есть файлы primes.c и primes.pyx. Почему я получаю эту ошибку?

1 Ответ

1 голос
/ 29 мая 2020

Вы пропустили шаг, чтобы встроить его в pyd.

Создайте setup.py:

from setuptools import setup
from Cython.Build import cythonize

setup(
    ext_modules=cythonize("primes.pyx"),
)

и запустите python setup.py build_ext --inplace в командной строке, чтобы построить его.

Они находятся в верхней половине документа.

...