Добавлен , опубликован
Раздел:
Общее

Интеграция Lua и Python

Сегодня мы познакомимся с интересным проектом под названием Lupa, который позволяет запускать Lua в среде Python и наоборот.

Зачем его использовать?

Lua - такой же динамичный язык, как Python, но LuaJIT компилирует его в очень быстрый машинный код, иногда быстрее, чем многие статически языки. Языковая среда выполнения очень мала и тщательно разработана для встраивания. Полный бинарный модуль Lupa, включая статически связанную среду выполнения LuaJIT2, весит всего около 700 КБ на 64-разрядной машине. Со стандартным Lua 5.1 он составляет менее 400 КБ.
Однако в экосистеме Lua отсутствуют многие элементы управления, которые Python легко включает либо в свою стандартную библиотеку, либо в виде сторонних пакетов. Это делает написание реальных приложений Lua более сложным, чем аналогичных приложений на Python. Поэтому Lua обычно не используется в качестве основного языка для больших приложений, но он обеспечивает быстрый, высокоуровневый и ресурсоемкий язык резервного копирования внутри Python, когда требуется скорость, а цикл редактирования-компиляции-запуска бинарных модулей слишком тяжелый и слишком статичный для гибкой разработки или горячего развертывания.

Установка

  • Установить Python
  • Ввести в командную строку pip install lupa

Быстрый старт

Более подробно на GitHub
from lupa import LuaRuntime
lua = LuaRuntime(unpack_returned_tuples=True)
l = lua.globals()

# Создать lua функцию
lua_add = lua.eval('function(a, b) return a+b end')
print(lua_add(5,6)) # 11

# Создать lua таблицу
lua_tbl = lua.eval('{a=1, b=2}')
for k, v in lua_tbl.items():
	print(k, v) # b 2, a 1

# Выполнить код
lua_code = '''
myObj = {}
myObj.value = 5
myObj.set_value = function(val)
	myObj.value = val
end
'''
lua.execute(lua_code)

myObj = l.myObj
print(myObj.value) # 5

myObj.set_value(7)
print(myObj.value) # 7

Результат

Lua код успешно соединился с библиотекой plotly для визуализации данных:
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
8
2 года назад
1
Я рад, что автор придерживается классического стиля гайдов.
1
32
2 года назад
1
((Тут была шутка про Лупу)), надо что то делать с названием, практические применение всё ещё не ясно, скорее всего что-то для программистов, но наверное это очень круто всё 👍
1
37
2 года назад
1
А если пайтон внутри луа внутри пайтона, будет pupa?
0
17
2 года назад
0
Почему такое название есть на гите)

практические применение всё ещё не ясно
Написано же в начале статьи. Для тебя это значит, что теперь ты можешь использовать свои наработки внутри Python или вообще написать веб-сервер на Lua, покинув в Lua некоторые библиотеки из Python, на гите есть примеры. Как видишь, сама интеграция делается в пару строк и без танцев с бубном
1
1
1 год назад
1
Очень интересно,спасибо автору за статью. Очень полезная для многих!
Чтобы оставить комментарий, пожалуйста, войдите на сайт.