Python не в порядке: как подключить другие языки к Python

Когда Python не подходит, вы можете подключить к Python другие языки.

Винсент Ван

В Python встроена изящная, слегка скрытая функция — он может взаимодействовать с другими языками. По сути, в дополнение к обычному коду Python вы также можете импортировать пакеты C/C++, модули Java и многое другое! Давайте разберем, как вы можете иметь интерфейс Python с другими языками:

Питон и С/С++

В основном есть 3 способа иметь интерфейс Python с C/C++:

  1. Написание привязок Python вручную (мощно, но сложно)
  2. Использование CTypes (просто, но медленно)
  3. Цитон (быстро)
  4. SWIG (общий)

Давайте разберем это:

  1. В Python есть хорошее руководство о том, как вручную писать расширения C для ваших программ Python. Это вариант, который позволяет вам максимально контролировать то, как Python взаимодействует с C, и его следует выбрать, если вы знаете, что делаете. Тем не менее, руководство довольно длинное и сложное, и для его работы необходимо выполнить довольно много настроек. Если у вас нет сумасшедших требований к скорости и вы хотите, чтобы он просто работал, это решение, вероятно, не для вас.
  2. CTypes — это встроенная библиотека Python, которая может загружать библиотеки DLL (или SO, обе работают). Это, безусловно, самый простой способ, практически не требующий настройки; все, что вам нужно сделать, это import ctypes, а затем cdll.LoadLibrary("/path/to/dll"). Но в этом методе есть одна оговорка; Python конвертирует типы данных в C и обратно за кулисами, что часто может приводить к замедлению работы. Если вы хотите только удобства и совместимости и не слишком заботитесь о скорости, это для вас; если вам нужно, чтобы ваш код работал быстро, проверьте Cython.
  3. Cython — это расширение Python, наиболее известное благодаря тому, что ваш код Python работает быстрее благодаря статической типизации, но оно также может импортировать код C/C++. У Cython есть приличная документация по настройке оболочки; хотя это больше работы, чем старые добрые CTypes, это определенно намного быстрее.
  4. SWIG — это генератор оболочек C/C++. Он делает намного больше, чем просто Python — он генерирует оболочки C/C++ для всего, от C# до Tcl. Вы можете следовать их учебнику, чтобы создать обернутую библиотеку для Python.
См. также:  Существуют ли какие-либо функции для возврата имени / роли вошедшего в систему пользователя на портале клиентов Acumatica?

Питон и Ява

Как и в C++, существует несколько способов взаимодействия Python и Java. Перечислим варианты:

  1. Jython — это специальный вариант Python, предназначенный для работы на JVM; то есть интерпретатор Python и ваш код Python работают в той же среде, что и программы Java. Это связано с дополнительным преимуществом Jython, которое позволяет импортировать пакеты Java в ваш скрипт Python. Дополнительная работа не требуется; вы можете импортировать пакеты Java так же, как и пакеты Python (например, from java.util import Math). Один из недостатков этого подхода заключается в том, что поскольку Jython является вариантом обычного CPython, не все пакеты CPython могут работать.
  2. VOC — это компилятор, который компилирует Python непосредственно в файлы классов Java. Это означает, что ваш код Python превращается непосредственно в код Java; вам не нужен отдельный переводчик. Его так же просто использовать, как Jython; просто from w.x import y (см. пример выше). Тем не менее, VOC все еще находится на ранней стадии разработки, он предназначен только для соответствия функциям Python 3.4 и не соответствует так много функций Python, как Jython. Ваш пробег может отличаться. Используйте на свой риск.

Питон и Джаваскрипт

Хорошо, на самом деле есть несколько способов сделать все это. Вот еще один список:

  1. PyV8 — это порт интерпретатора Javascript от Google, завернутый в Python. Вы можете запускать любой действительный код Javascript, который не зависит от DOM/веб-сайта HTML; У Эндрю Уилкинсона есть отличное руководство по интеграции. Для тех из вас, кто не хочет открывать другую вкладку браузера, вот описание того, как ее использовать:
    1. pip3 install --user pyv8
    2. Откройте файл
    3. Вставьте эти 5 строк :

    import pyv8
    ctxt = pyv8.JSContext()
    ctxt.enter()
    ctxt.eval(open(«library.js»).read( )) # Где library.js — это ваша JS-библиотека
    value = ctxt.eval(“library_function({})”.format(param)) # Очевидно, отредактируйте под свои нужды

2. Transcrypt — компилятор Python в Javascript. Вы можете использовать библиотеки Node.js так же, как обычно — например, быстрый http = require('http') импортирует библиотеку HTTP. Когда вы закончите, вы можете скомпилировать свой код Python в JS, используя transcrypt -b -p .none file.py, а затем запустить его, используя node file.js.. Вы также можете использовать их как обычные клиентские JS, подключенные к HTML; дальнейшая документация находится здесь. ПРИМЕЧАНИЕ: во время тестирования мне не удалось заставить работать экспорт Transcrypt в Node.js. Это может быть только временная ошибка, но если вы планируете использовать Node.js или серверный Javascript, вы можете использовать XML-RPC ниже.

Питон и Го

Вы можете скомпилировать Go code to C. Как только вы это сделаете, вам будет просто следовать одному из методов, перечисленных выше. Вот как это сделать:

  1. Запустите go build -buildmode=c-shared -o hello.so name_of_file.go (вы можете заменить name_of_file.go на каталог, чтобы скомпилировать весь каталог)
  2. Используйте любой из методов, перечисленных в разделе «Python и C».
  3. Выгода!

Другие методы

В дополнение к перечисленным выше способам для конкретных языков существуют также методы, которые должны работать на любом языке, и методы, работающие на других языках. Вот список:

  1. XML-RPC: XML-RPC — это протокол, позволяющий программам вызывать функции с использованием полезных данных XML. Любой язык с поддержкой протокола XML-RPC должен иметь возможность использовать этот метод; примерами являются Python, Java, Go и Perl. Поскольку реализации и библиотеки зависят от языка, я не могу здесь вдаваться в подробности; начать можно было бы со слов этот документ, вероятно, десятилетней давности. Базовая архитектура — серверно-клиентская; Python — это клиент (он получает результат), а язык, который вы хотите интегрировать, — это сервер (он получает запрос и возвращает результат).
  2. В собственной документации Python есть большой список проектов, которые могут помочь вам интегрировать Python с другими языками. Некоторые из них могут быть старыми/устаревшими/нестабильными, поэтому используйте их на свой страх и риск!

Вывод

Python — отличный язык сам по себе, но в чем он действительно преуспевает, так это в качестве «связующего» языка. Благодаря своей способности взаимодействовать со многими языками, такими как C++ и Java, это отличный язык для написания проектов, которые могут включать несколько языков программирования.

Понравилась статья? Поделиться с друзьями:
IT Шеф
Добавить комментарий

;-) :| :x :twisted: :smile: :shock: :sad: :roll: :razz: :oops: :o :mrgreen: :lol: :idea: :grin: :evil: :cry: :cool: :arrow: :???: :?: :!: