Запуск кода Cython в интерпретаторе

Я являюсь пользователем Matlab и С++ и недавно обнаружил python (spyder) как возможную замену для обоих. Одним из основных преимуществ, которые, по моему мнению, было у python, была способность работать в режиме интерпретатора, а затем легко перевести его в быстрый скомпилированный код, как только я доволен результатом. Интерпретируемая среда отлично подходит для прототипирования, анализа данных во время остановки в точке останова, создания сюжетов и изображений вокруг и т.д.

Я начал изучать Cython, и я не полностью понимаю поток программирования. Допустим, у вас есть .py-код, который вы хотите ускорить. Вам нужно писать файл .pyx с нуля? Можете ли вы запустить файл .pyx в интерпретируемом режиме, как если бы это был обычный .py файл (перед компиляцией)? Как вы отлаживаете код в файле .pyx?

Ответ 1

Вам нужно написать файл .pyx с нуля?

Можно ли запустить файл .pyx в интерпретируемом режиме, как если бы это был обычный .py файл (перед компиляцией)?

Как вы отлаживаете код в файле .pyx?

Летающие спагетти-монстры помогают тем, кто помогает себе.

Ответ 2

У меня нет особого опыта работы с Cython, но, судя по этой записи в их документации, рекомендуется использовать файл setup.py со следующими строками:

from distutils.core import setup
from Cython.Build import cythonize

setup(name='Hello world app', ext_modules=cythonize("hello.pyx"))

Здесь hello.pyx - это просто пример файла, вам придется заменить строку для ссылки на ваш скрипт Python.

После этого вы сможете позвонить

python setup.py build_ext --inplace

который скомпилирует ваш код и оставит вас с новым файлом. Теперь, пока этот файл находится в том же каталоге, вы можете легко импортировать то, что вы определили в своем файле, как и в любом другом модуле. Например, предположим, что вы скомпилировали файл hello.pyx с функцией f, вы можете написать:

from hello import f

и затем перейдите к использованию f.


Теперь по поводу других ваших вопросов. Кажется, что .pyx просто указывает на то, что это должен быть код Cython, здесь нет никакой разницы. Используя метод со сценарием setup.py как описано выше, вы также можете ссылаться на файл с окончанием .py. Однако Python не позволяет вам импортировать из файлов .pyx, только из файлов, созданных после компиляции.

Что касается того, как вы будете отлаживать код в файле .pyx, у меня нет достаточно информации об этом, хотя вы, вероятно, могли бы просто отладить не скомпилированный файл, как файл .py.