Добро пожаловать в Ситон!
Cython — это компилятор Python, который позволяет писать расширения C для Python так же просто, как и сам Python. Cython основан на Pyrex, но поддерживает более современные функции и оптимизации.
Cython преобразует код Python в код C/C++, но дополнительно поддерживает вызов функций C и объявление типов C для переменных и атрибутов классов. Это позволяет компилятору генерировать очень эффективный код C из кода Cython.
Это делает Cython идеальным языком для оболочки внешних библиотек C и для быстрых модулей C, которые ускоряют выполнение кода Python.
- Официальный сайт: https://cython.org/
- Документация: https://docs.cython.org/.
- Репозиторий Github: https://github.com/cython/cython.
- Вики: https://github.com/cython/cython/wiki
Cython имеет около 30 миллионов загрузок в месяц на PyPI. Вы можете поддержать проект Cython через спонсоров Github или Tidelift.
Установка:
Если у вас уже есть компилятор C, просто выполните следующую команду:
pip установить Cython
в противном случае см. страницу установки.
Лицензия:
Исходная программа Pyrex лицензировалась «без ограничений» (см. ниже). Сам Cython лицензируется согласно разрешительной лицензии Apache .
См. ЛИЦЕНЗИЯ.txt.
Содействие:
Хотите внести свой вклад в проект Cython? Вот некоторая помощь, чтобы вы могли начать.
Отличия от других компиляторов Python
Созданный как проект в начале 2000-х годов, Cython пережил большинство других попыток создания статических компиляторов для языка Python.
К подобным проектам, имеющим сегодня актуальность, относятся:
- PyPy, реализация Python с JIT-компилятором.
- Плюсы: JIT-компиляция с оптимизацией времени выполнения, полная совместимость с языком, хорошая интеграция с внешним кодом C/C++.
- Минусы: среда выполнения, отличная от CPython, относительно большое использование ресурсов среды выполнения, ограниченная совместимость с расширениями CPython, неочевидные результаты по производительности.
- Numba, расширение Python, включающее JIT-компилятор для подмножества языка, основанное на инфраструктуре компилятора LLVM (вероятно, наиболее известном благодаря компилятору
clang
C). В основном он нацелен на числовой код, использующий NumPy.- Плюсы: JIT-компиляция с оптимизацией времени выполнения.
- Минусы: ограниченная языковая поддержка, относительно большая зависимость времени выполнения (LLVM), неочевидные результаты по производительности.
- Pythran — статический компилятор расширений Python-C++ для подмножества языка, в основном ориентированный на числовые вычисления. Pythran можно (и, вероятно, лучше всего) использовать в качестве дополнительного бэкэнда для кода NumPy в Cython.
- mypyc — статический компилятор расширений Python-C, основанный на статическом анализаторе Python mypy. Как и в режиме чистого Python Cython, mypyc может использовать аннотации типов PEP-484 для оптимизации кода для статических типов.
- Плюсы: хорошая поддержка языка и типизации PEP-484, хороший вывод типов, разумный прирост производительности.
- Минусы: нет поддержки низкоуровневой оптимизации и типизации, самоуверенная интерпретация типов Python, ограниченная совместимость Python и самоанализ после компиляции.
- Nuitka, статический компилятор расширений Python-C.
- Плюсы: высокая совместимость с языком, разумный прирост производительности, поддержка статического связывания приложений (аналогично cython_freeze, но с возможностью объединения библиотечных зависимостей в автономный исполняемый файл).
- Минусы: нет поддержки низкоуровневой оптимизации и набора текста.
По сравнению с вышеизложенным, Cython предоставляет
- быстрая, эффективная и полностью совместимая поддержка практически всех функций языка Python, включая динамические функции и самоанализ.
- полная совместимость во время выполнения со всеми используемыми и будущими версиями CPython.
- «Сгенерировать один раз, компилировать везде» Генерация кода C, позволяющая получать воспроизводимые результаты производительности и тестирования.
- Адаптация времени компиляции C к целевой платформе и версии Python
- поддержка других реализаций C-API, включая PyPy и Pyston.
- бесшовная интеграция с кодом C/C++
- широкая поддержка ручной оптимизации и настройки до уровня C
- большая база пользователей с тысячами библиотек, пакетов и инструментов
- почти два десятилетия исправления ошибок и статической оптимизации кода
Получите полную историю источника:
Обратите внимание, что раньше Cython поставлял полный репозиторий с контролем версий в исходном дистрибутиве, но больше не делает этого из-за нехватки места. Чтобы получить полную историю исходного кода из загруженного исходного архива, убедитесь, что у вас установлен git, затем войдите в базовый каталог дистрибутива исходного кода Cython и введите:
сделать репо
Далее от Pyrex:
Это разрабатываемая версия Pyrex, языка для написания модулей расширения Python.
Для получения дополнительной информации посмотрите:
- Doc/About.html для описания языка.
- INSTALL.txt с инструкциями по установке.
- USAGE.txt для инструкций по использованию.
- Демо с примерами использования
Комментарии, предложения, сообщения об ошибках и т. д. приветствуются!
Авторские права: Pyrex не имеет ограничений. Вы можете использовать, распространять, изменять и распространять модифицированные версии.
Последнюю версию Pyrex можно найти здесь.
Грег Юинг, факультет компьютерных наук
Кентерберийский университет
Крайстчерч, Новая Зеландия
Гражданин NewZealandCorp, дочерней компании USA Inc.