Параметры компонента: Python

Внесенные изменения вступают в силу после нажатия кнопки Сохранить.

Параметр Значение по умолчанию Описание
Выполнение запрещено true Параметр запрещает выполнение узла Python, если выставлено значение true, и позволяет выполнять узел при значении false
Путь библиотеки Определяет путь к файлу python3x.dll, где x — номер минорной версии, разделяемой библиотеки Python. Указывается опционально. По умолчанию используется установленный Python последней версии, зарегистрированный в операционной системе. Если в параметре путь не задан, то осуществляется его автоматический поиск в переменной окружения PYTHONHOME и реестре. Самый простой способ узнать путь до библиотеки python3x.dll — воспользоваться командной строкой в Windows. Для этого необходимо открыть консоль «Командная строка» («CMD») и ввести запрос «where python*.dll» (в качестве примера была выбрана для отображения версия Python 3.9). Ответом будет полный путь до необходимой библиотеки. Путь к библиотеке Python через командную строку
Путь интерпретатора Определяет путь к исполняемому файлу интерпретатора, который выполняет скрипт из узла Python в режиме выполнения Python в отдельном процессе. Кроме того этот путь учитывается в режиме выполнения узла Python при поиске модулей внутри процесса Loginom. По умолчанию Путь интерпретатора задается: 1. в Windows аналогично поиску разделяемой библиотеки; 2. в Linux следующим образом: а. определяется домашняя директория Python: если в переменной окружения PYTHONHOME указан действительный путь в системе, то берётся он, иначе домашняя директория равна /usr, б. оносительно домашней директории исполняемый файл интерпретатора ищется по пути /bin/python3, в. если исполняемый файл не найден, то выполняется python3 без указания пути.
Передавать переменные окружения узла false Параметр необходим для запуска процесса Python в изолированном окружении. При значении true в процесс Python добавляются переменные окружения: LAUNCHER_PATHS — примонтированные в файловое хранилище пути, разделенные : (Linux) или ; (Windows), LAUNCHER_USER — имя пользователя Loginom, LAUNCHER_USER_TMP и LAUNCHER_COMMON_TMP — пути папок для сохранения временных файлов пользователя и рабочей директории, LAUNCHER_PIPEDIR — имя папки, в которой создаются файлы именованных каналов для IPC (Linux), LAUNCHER_PIPENAME — имя дуплексного именованного канала для IPC (Windows), LAUNCHER_CURRENTDIR — имя текущей папки Loginom (совпадает с путём сохранённого пакета), LAUNCHER_LOCALE — имя текущей локали (например, ru_RU), LAUNCHER_NODE_GUID — GUID узла, LAUNCHER_NODE_NAME — имя узла, LAUNCHER_NODE_DISPLAYNAME — метка узла, LAUNCHER_PREVIEW — устанавливается для Предпросмотра.

Для работы узлов Python необходимо учитывать следующие особенности и ограничения:

  • Минимальная поддерживаемая версия Python — 3.5.
  • Максимальная протестированная версия Python — 3.12.
  • Создание GUI-интерфейса из кода Python не является целевым назначением компонента Python и в некоторых случаях может приводить к неверной работе приложения. Например:
    • работа узла не будет прекращена до завершения работы GUI-приложения. При работе в серверных редакциях Loginom пользователь, как правило, не имеет доступа к окну GUI-приложения.

Для работы узлов Python в изолированном окружении пользователя необходимо сделать следующее:

  • В Администрировании, в параметрах компонента Python включить опцию "Передавать переменные окружения узла".
  • В параметре "Путь интерпретатора" указать полный путь к bash-скрипту — python_run.sh (или аналогичному).
  • Для запуска на Linux должен быть установлен Docker или Podman. В python_run.sh имеется параметр DOCKER_OR_PODMAN, отвечающий за способ контейниризиции, значение по умолчанию — podman.
  • Должен быть подготовлен базовый docker образ c Python и нужными Python пакетами внутри. В python_run.sh имя образа прописывается в параметре IMAGE_NAME, значение по умолчанию — python.

В python_run.sh имеется параметр CONTAINER_OPTIONS, в который можно передавать настройки контейнера, например, значение переменной oom-score-adj. По умолчанию устанавливается значение oom-score-adj=1000. То есть если OOM Killer будет необходимо завершить какой-либо процесс, то контейнер будет первым кандидатом для этого.

Для работы узлов Python внутри процесса Loginom необходимо учитывать следующие особенности и ограничения:

  • В системе должен быть установлен Python одной разрядности с приложением/сервером Loginom.
  • Python из дистрибутива Anaconda не поддерживается.
  • Не поддерживаются модули пакета multiprocessing.
  • Создание GUI-интерфейса из кода Python не является целевым назначением компонента Python и в некоторых случаях может приводить к неверной работе приложения. Например:
    • для работы matplotlib с бэкэндом Qt и в целом с PyQt требуется наличие файла qt.conf с путями к библиотекам/плагинам Qt. При невозможности их найти, приложение Loginom будет принудительно завершено с сообщением об ошибке.
  • Оставленные незавершенными фоновые потоки могут приводить к аварийному завершению приложения.
  • В случае критических ошибок python3x.dll может аварийно завершить приложение. Рекомендуется использовать предварительно отлаженный код Python.
  • Одновременно может выполняться только один узел Python.
  • Остановить выполнение узла Python можно только между инструкциями интерпретатора.
  • Виртуальные окружения возможно использовать при задании Путь интерпретатора. Для этого путь интерпретатора должен указывать на python.exe внутри виртуального окружения подробнее о поиске модулей Python внутри процесса Loginom. Для корректной работы версия python.exe в виртуальном окружении и версия python3x.dll, через которую выполняется код узла, должны совпадать.

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

Примечание: под Linux не поддерживается режим выполнения Python внутри процесса Loginom, следовательно, нет и настройки Путь библиотеки. Узлы Python, настроенные на выполнение внутри процесса, на Linux будут выполняться в отдельном процессе.

Поиск модулей Python внутри процесса Loginom

Путь к папке, в которой расположен интерпретатор, добавляется как ещё один путь в sys.path — список путей, по которым ищутся модули.

Если на один каталог выше каталога Путь интерпретатора существует файл с именем pyvenv.cfg, то sys.prefix и sys.exec_prefix устанавливаются равными этому каталогу, и проверяется наличие site-packages. Найденный site-packages добавляется в sys.path. Если pyvenv.cfg содержит ключ include-system-site-packages и его значение не равно true, то базовый путь site-packages (относительно sys.base_prefix) не включается в sys.path.