Сообщить об ошибке.

Реализации Python

В настоящее время имеются шесть промышленных реализаций Python:

  1. CPython,
  2. Jython,
  3. IronPython,
  4. РуРу,
  5. Anaconda,
  6. Brython.

Для экспериментов и обучения используйте реализацию CPython как наиболее зрелую и получившую широкую поддержку. Она существует дольше других, в то время как Jython, IronPython и РуРу являются более новыми реализациями и в меньшей степени проявили себя.

Для научных математических вычислений, а так же для экспериментов с машинным обучением, искусственным интеллектом и в сфере компьютерного зрения рекомендуется использовать пакет Anaconda, так как он включает в себя все, уже скомпилированные, необходимые для названных целей пакеты и инструменты.

Приложение, созданное с помощью Jython, является полноценным Jаvа приложением со всеми свойственными Java преимуществами и недостатками развертывания и выполняется на любой целевой машине с подходящей JVM. Точно так же приложение, созданное с помощью IronPython, полностью совместимо со спецификациями .NЕТ. РуРу, благодаря JIТ-компиляции в машинный код, зачастую обеспечивает большее быстродействие чем реализация CPython и совместима с большин­ством стандартных библиотек CPython.

На сайте docs-python.ru говориться о CPython, как о наиболее широко используемой реализации.

CPython.

CPython классическая реализация и часто называемая просто Python, ее можно считать "эталонной реализацией" языка. CPython включает компилятор, интерпретатор и набор встроенных модулей и дополнительных расширений, которые написаны на языке С.

CPython можно использовать на любой платформе, обеспечивающей работу компилятора языка С, т.е. на любой из современных популярных платформ. О том, как загрузить и установить CPython смотри раздел "Установка Python".

Jython.

Jython это реализация Python на виртуальной машине Java (JVM), предоставляя Python преимущества работы на JVM и доступ к классам, написанным на Java. Аналогично IronPython, код, выполняемый в Jython, может взаимодействовать с классами и библиотеками Java, но не может использовать многие библиотеки, предназначенные для CPython.

Jython поддерживает пока только версию v2. Работая на Jython, вы сможете использовать все библиотеки и фреймворки Java. Оптимальное использование Jython требует знакомства с основными классами Java. Вам не придется писать код на Java, но документация и примеры для библиотек реализованы в терминах Java, по этому, Jаvа-классы не должны быть чем-то новым.

Jython дополняет Java и особенно подходит для решения следующих задач:

  • Встроенные скрипты - Java-программисты могут добавлять библиотеки Jython в свою систему, чтобы конечные пользователи могли писать простые или сложные скрипты, которые расширяют функциональность приложения.
  • Интерактивное экспериментирование - Jython предоставляет интерактивный интерпретатор, который можно использовать для взаимодействия с пакетами Java или запущенными приложениями Java. Это позволяет программистам экспериментировать и отлаживать любую систему Java с использованием Jython.
  • Быстрая разработка приложений - программы на Python обычно в 2-10 раз короче аналогичных программ на Java. Это напрямую приводит к повышению производительности программиста. Бесшовное взаимодействие между Python и Java позволяет разработчикам свободно смешивать два языка как во время разработки, так и при выпуске продуктов.

Пример запуска кода на Python внутри простого Java-приложения:

import org.python.util.PythonInterpreter;

public class JythonHelloWorld {
  public static void main(String[] args) {
    try(PythonInterpreter pyInterp = new PythonInterpreter()) {
      pyInterp.exec("print('Hello Python World!')");
    }
  }
}

Пример использования Java из кода Python

from java.lang import System # Java import

print('Running on Java version: ' + System.getProperty('java.version'))
print('Unix time from Java: ' + str(System.currentTimeMillis()))

Дополнительно смотрите:

lronPython.

IronPython это реализация .NET для Python (доступна 32- и 64-разрядная версия), обеспечивающая взаимодействие с C#, F# и Visual Basic, доступ к API-интерфейсам .NET, стандартную отладку Python (но не отладку в смешанном режиме C++) и отладку в смешанном режиме IronPython и C#. Однако IronPython не поддерживает виртуальные среды.

С IronPython можно использовать все библиотеки и фреймворки CLR. Существует кросс-платформенная реализация CLR, известная под названием Mono (www.mono-project.com) которая работает под управлением других операционных систем. Оптимальное использование IronPython требует знакомства с основными библиотеками CLR. Вам не придется писать код на С#, но документация и примеры для библиотек реализованы в терминах С#, по этому, язык С# не должен быть для вас чем-то новым. Чтобы использовать IronPython, вам следует обратиться к оригинальной онлайн-документацией IronPython.

РуРу.

РуРу - исторически сложилось так, что PyPy использовался для обозначения двух вещей. Первое - это набор инструментов перевода RPython для создания интерпретаторов под динамические языки программирования. А второе - это одна из конкретных реализаций Python, созданных с его помощью. Так как RPython использует тот же синтаксис, что и Python, эта сгенерированная версия стала известна как интерпретатор Python, написанный на Python.

Теперь, что бы не было путаницы, слово PyPy используется для обозначения реализации Python2/3 с явным упоминанием RPython translation toolchain. PyPy разработан таким образом, чтобы быть гибким и с ним было легко экспериментировать. В принципе, о PyPy можно сказать, что это полноценная замена CPython. Он создан с использованием языка RPython, который был разработан совместно с ним. Основная причина его использования вместо CPython - скорость: он обычно работает быстрее.

Дополнительно смотрите раздел "Установка и использование PyPy3".

Примечание: на платформе/фреймворке RPython также реализованы Prolog (почти полный), Smalltalk, JavaScript, Scheme и Gameboy. Существует также реализация Ruby под названием Topaz и реализация PHP под названием HippyVM.

Anaconda.

Anaconda - дистрибутив языков программирования Python и R, включающий набор популярных свободных библиотек, объединённых проблематиками науки о данных и машинного обучения. Основная цель - поставка единым согласованным комплектом наиболее востребованных соответствующим кругом пользователей тематических модулей с разрешением возникающих зависимостей и конфликтов, которые неизбежны при неудачной установке . По состоянию на 2020 год содержит более 1,6 тыс. модулей.

Предназначена в основном для:

  • Разработки и обучения моделей машинного обучения и глубокого обучения с помощью scikit-learn , TensorFlow и Theano.
  • Анализа больших данных с большой производительностью и последующим масштабированием с помощью пакетов Dask , NumPy , pandas и Numba.
  • Визуализации результатов с помощью Matplotlib , Bokeh , Datashader и Holoviews.

Основная особенность дистрибутива - оригинальный менеджер разрешения зависимостей conda с графическим интерфейсом Anaconda Navigator, что позволяет отказаться от стандартных менеджеров пакетов (таких, как pip для Python). Дистрибутив скачивается единожды, и вся последующая конфигурация, в том числе установка дополнительных модулей, может проводится в офлайне. Кроме того, обеспечивается возможность ведения нескольких изолированных сред с раздельным разрешением версионных зависимостей в каждой.

Поддерживаются платформы Linux (x86-64), Windows (i686, x86-64), macOS

Brython.

Brython - реализация Python 3 для клиентского веб-программирования.

Brython призван заменить Javascript в качестве языка сценариев для программистов Python. Таким образом, это реализация Python 3 (ее можно протестировать через консоль браузера), адаптированная к среде HTML5, то есть с интерфейсом к объектам и событиям DOM.

Важно! Скорость выполнения для большинства операций -аналогична CPython.

Brython можно использовать, ничего не устанавливая, просто подключив скрипты Brython из CDN cdn.jsdelivr.net или cdnjs.cloudflare.com.

Можно выбрать какую-то определенную версию Python 3 (страница релизов Brython на Github):

<script src="https://cdn.jsdelivr.net/npm/brython@3.11.2/brython.min.js"></script>

Поддерживаются диапазоны версий, поэтому, если нужна последняя из версий 3.11.x:

<script src="https://cdn.jsdelivr.net/npm/brython@3.11/brython.min.js"></script>

Предыдущий код позволит использовать необработанный код Python, но если необходимо импортировать модули из стандартной библиотеки, то нужно загрузить еще один файл javascript с доступной стандартной библиотекой Python:

<script src="https://cdn.jsdelivr.net/npm/brython@3.11.2/brython_stdlib.js"></script>

<!-- или так -->

<script src="https://cdn.jsdelivr.net/npm/brython@3.11/brython_stdlib.js"></script>

Важное предупреждение: Brython выполняет программы, написанные на Python, но не программы, написанные на C. Это означает, что, например, numpy и пакеты обработки данных, которые его используют, не будут работать.Кроме того, возможность браузеров отправлять HTTP-запросы ограничена по соображениям безопасности. Такие пакеты, как urllib.request в стандартном дистрибутиве, не смогут отправлять произвольные запросы на любой URL-адрес. Это общее для всех реализаций Python в браузере.

Чтобы начать использовать Brython, все, что нужно сделать, это:

  • Загрузить скрипт brython.js и brython_stdlib.js.
    • brython.js включает в себя очень часто используемые модули: browser, browser.html, javascript.
    • brython_stdlib.js: группирует все модули и пакеты части стандартной библиотеки Python, поддерживаемой Brython.
  • Загрузить функцию brython() при загрузке HTML страницы, например <body onload='brython()'>. На этапе разработки можно передать аргумент функции brython():
    • 1 для отображения сообщений об ошибках в консоли веб-браузера,
    • 2 для отображения кода Javascript вместе с ошибкой.
  • Написать код Python внутри тегов .

    <html>
    <head>
      <script src="https://cdn.jsdelivr.net/npm/brython@3.11/brython.min.js"></script>
    </head>
    <body onload="brython()">
      <script type="text/python">
        from browser import document
        from browser.widgets.dialog import InfoDialog
        def click(ev):
            InfoDialog("Hello", f"Hello, {document['zone'].value} !")
        // привязать событие 'click' на кнопку с `id="echo"`
        document["echo"].bind("click", click)
      </script>
      <input id="zone">
      <button id="echo">click !</button>
    </body>
    </html>
    
  • Если программа Python большая, другой вариант - записать ее в отдельный файл и загрузить с помощью атрибута src тега script:

    <html>
    <head>
      <script src="https://cdn.jsdelivr.net/npm/brython@3.11/brython.min.js"></script>
    </head>
    <body onload="brython()">
      <script type="text/python" src="test.py"></script>
      <input id="zone" autocomplete="off">
      <button id="mybutton">click!</button>
    </body>
    </html>
    

Локальная установка.

Brython можно установить локально при помощи pip в виртуальное окружение:

$ pip install brython

Пакет устанавливает клиентскую программу brython-cli (аналогично python -m brython). Затем в пустом каталоге нужно запустить:

$ brython-cli install

Обновления:

При публикации новой версии Brython обновление выполняется обычной командой:

$ pip install brython --upgrade

Затем в каталоге приложения можно обновить файлы Brython (brython.js и brython_stdlib.js):

$ brython-cli upgrade

Другие команды:

  • make_modules: создает дистрибутив для конкретного приложения, чтобы заменить brython_stdlib.js файлом меньшего размера.
  • make_dist: сгенерируйте пакет CPython, подходящий для распространения с помощью PyPI, для установки приложения Brython.
  • make_package: генерирует "Brython package", позволяющий очень просто распространять модуль или пакет.
  • -- version: печатает версию Brython.