Skip to main content

Интеграция Python скриптов в код надстроек

Вы можете интегрировать и вызывать функции, написанные на языке Python, непосредственно из Lua кода надстроек. Для этого используется Lua модуль pyxm, который поставляется вместе с редакторами МойОфис. Данный модуль позволяет вызывать Python функции, передавать параметры и получать результаты обратно в Lua код.

Модуль pyxm использует Stable Application Binary Interface для взаимодействия с Python скриптами. Этот интерфейс предоставляет фиксированный набор функций и структур и гарантирует бинарную совместимость между различными версиями интерпретатора. Это позволяет pyxm стабильно работать со скриптами даже после обновления версии Python или сторонних библиотек.

Использование​

Создайте Python файл, подключите необходимые библиотеки и задайте функции. В данном примере этот файл называется "PythonModule.py".


import math

def myFunction(number):
value = math.factorial(number)
return value

Создайте в папке надстройки каталог с названием "Python" или "python" и расположите там ваш Python файл:


Extension_Name
├── cmd
└── CommandsProvider.lua
├── Python
└── PythonModule.py
├── META-INF
└── LICENSE
└── Package.lua

Для вызова созданных Python функций из Lua кода надстройки, необходимо загрузить модуль pyxm и импортировать необходимый файл:


local engine = require("pyxm") -- Загружаем модуль pyxm
local module = engine.import("PythonModule") -- Импортируем Python файл

function CommandsProvider.myCommand(context)
context.doWithDocument(function(document)
local sheet = document:getBlocks():getTable(0)
local cell = sheet:getCell("B5")
local indexR = cell:getRowIndex()
local newIndexR = module.myFunction(indexR) -- Вызываем Python функцию
-- ...
end)
end

Информация

Надстройки с Python скриптами создаются, подписываются и устанавливаются аналогично обычным надстройкам.

Модуль pyxm работает в операционных системах Windows и Linux. Он имеет зависимость от библиотеки python3.dll (Windows) или libpython3.so (Linux). Соответствующая библиотека должна присутствовать в системный путях для работы модуля.

В некоторых Linux системах данная библиотека может отсутствовать в установленной версии Python. В этом случае создайте символическую ссылку на эту библиотеку (включая минорную версию), например:


sudo ln -s /path/to/libpython3.XX.so /path/to/libpython3.so

Чтобы проверить наличие данной библиотеки в ОС Windows, выполните следующую команду в PowerShell:


$env:PATH -split ';' | ForEach-Object { Join-Path $_ 'python3.dll' } | Where-Object { Test-Path $_ }

Правила конвертации данных​

Модуль позволяет передавать в функции на языке Python и возвращать в Lua код только простые типы, которые конвертируются по следующим правилам:

Python – lua​

  • None ⇔ nil

  • Bool ⇔ boolean

  • Int ⇔ number

  • Float ⇔ number

  • Str ⇔ string

  • List ⇔ array

  • Tuple → array, если он вложен в другую структуру данных. На верхнем уровне – возвращает нескольких значений.

  • Dict ⇔ table

Особенности использования​

  • Для создания интеграции требуется Python версии 3.6 и выше.
  • Для установки таких надстроек необходима версия Python 3.6 и выше (зависит от используемых в надстройке библиотек Python).
  • Не гарантируется корректная работа Python библиотек, которые не поддерживают работу в встраиваемом Python (например, numpy).