Когда Python не подходит, вы можете подключить к Python другие языки.
Винсент Ван
В Python встроена изящная, слегка скрытая функция — он может взаимодействовать с другими языками. По сути, в дополнение к обычному коду Python вы также можете импортировать пакеты C/C++, модули Java и многое другое! Давайте разберем, как вы можете иметь интерфейс Python с другими языками:
Питон и С/С++
В основном есть 3 способа иметь интерфейс Python с C/C++:
- Написание привязок Python вручную (мощно, но сложно)
- Использование CTypes (просто, но медленно)
- Цитон (быстро)
- SWIG (общий)
Давайте разберем это:
- В Python есть хорошее руководство о том, как вручную писать расширения C для ваших программ Python. Это вариант, который позволяет вам максимально контролировать то, как Python взаимодействует с C, и его следует выбрать, если вы знаете, что делаете. Тем не менее, руководство довольно длинное и сложное, и для его работы необходимо выполнить довольно много настроек. Если у вас нет сумасшедших требований к скорости и вы хотите, чтобы он просто работал, это решение, вероятно, не для вас.
- CTypes — это встроенная библиотека Python, которая может загружать библиотеки DLL (или SO, обе работают). Это, безусловно, самый простой способ, практически не требующий настройки; все, что вам нужно сделать, это
import ctypes
, а затемcdll.LoadLibrary("/path/to/dll").
Но в этом методе есть одна оговорка; Python конвертирует типы данных в C и обратно за кулисами, что часто может приводить к замедлению работы. Если вы хотите только удобства и совместимости и не слишком заботитесь о скорости, это для вас; если вам нужно, чтобы ваш код работал быстро, проверьте Cython. - Cython — это расширение Python, наиболее известное благодаря тому, что ваш код Python работает быстрее благодаря статической типизации, но оно также может импортировать код C/C++. У Cython есть приличная документация по настройке оболочки; хотя это больше работы, чем старые добрые CTypes, это определенно намного быстрее.
- SWIG — это генератор оболочек C/C++. Он делает намного больше, чем просто Python — он генерирует оболочки C/C++ для всего, от C# до Tcl. Вы можете следовать их учебнику, чтобы создать обернутую библиотеку для Python.
Питон и Ява
Как и в C++, существует несколько способов взаимодействия Python и Java. Перечислим варианты:
- Jython — это специальный вариант Python, предназначенный для работы на JVM; то есть интерпретатор Python и ваш код Python работают в той же среде, что и программы Java. Это связано с дополнительным преимуществом Jython, которое позволяет импортировать пакеты Java в ваш скрипт Python. Дополнительная работа не требуется; вы можете импортировать пакеты Java так же, как и пакеты Python (например,
from java.util import Math
). Один из недостатков этого подхода заключается в том, что поскольку Jython является вариантом обычного CPython, не все пакеты CPython могут работать. - VOC — это компилятор, который компилирует Python непосредственно в файлы классов Java. Это означает, что ваш код Python превращается непосредственно в код Java; вам не нужен отдельный переводчик. Его так же просто использовать, как Jython; просто
from w.x import y
(см. пример выше). Тем не менее, VOC все еще находится на ранней стадии разработки, он предназначен только для соответствия функциям Python 3.4 и не соответствует так много функций Python, как Jython. Ваш пробег может отличаться. Используйте на свой риск.
Питон и Джаваскрипт
Хорошо, на самом деле есть несколько способов сделать все это. Вот еще один список:
- 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. Как только вы это сделаете, вам будет просто следовать одному из методов, перечисленных выше. Вот как это сделать:
- Запустите
go build -buildmode=c-shared -o hello.so name_of_file.go
(вы можете заменить name_of_file.go на каталог, чтобы скомпилировать весь каталог) - Используйте любой из методов, перечисленных в разделе «Python и C».
- Выгода!
Другие методы
В дополнение к перечисленным выше способам для конкретных языков существуют также методы, которые должны работать на любом языке, и методы, работающие на других языках. Вот список:
- XML-RPC: XML-RPC — это протокол, позволяющий программам вызывать функции с использованием полезных данных XML. Любой язык с поддержкой протокола XML-RPC должен иметь возможность использовать этот метод; примерами являются Python, Java, Go и Perl. Поскольку реализации и библиотеки зависят от языка, я не могу здесь вдаваться в подробности; начать можно было бы со слов этот документ, вероятно, десятилетней давности. Базовая архитектура — серверно-клиентская; Python — это клиент (он получает результат), а язык, который вы хотите интегрировать, — это сервер (он получает запрос и возвращает результат).
- В собственной документации Python есть большой список проектов, которые могут помочь вам интегрировать Python с другими языками. Некоторые из них могут быть старыми/устаревшими/нестабильными, поэтому используйте их на свой страх и риск!
Вывод
Python — отличный язык сам по себе, но в чем он действительно преуспевает, так это в качестве «связующего» языка. Благодаря своей способности взаимодействовать со многими языками, такими как C++ и Java, это отличный язык для написания проектов, которые могут включать несколько языков программирования.