Python

Приложения Python, использующие поддерживаемые системы сборки, такие как Meson, CMake или Autotools, могут быть созданы стандартным методом. Однако многие приложения Python используют настраиваемые сценарии установки или, как ожидается, будут установлены с помощью Setuptools и pip.

Для этих случаев flatpak-builder предоставляет простую систему сборки. Вместо того, чтобы автоматизировать процесс сборки, simple принимает массив строк build-commands, которые выполняются последовательно.

Например, следующий YAML упрощает сборку модуля популярных запросов:

name: requests
buildsystem: simple
build-commands:
  - pip3 install --prefix=/app --no-deps .
sources:
  - type: archive
    url: https://files.pythonhosted.org/packages/source/r/requests/requests-2.18.4.tar.gz
    sha256: 9c443e7324ba5b85070c4a818ade28bfabedf16ea10206da1132edaa6dda237e

Здесь build-commands - это массив, содержащий команды, необходимые для сборки и установки модуля. Как видно, в этом случае для этого запускается pip. Здесь важен параметр --prefix=/app, потому-что в противном случае pip попытается установить модуль в /usr/, который смонтирован /usr/ только для чтения внутри песочницы и запись в него окончится неудачно.

Обратите внимание, что параметр --no-deps используется только в целях примера - поскольку модуль запросов имеет свои собственные зависимости, сборка завершится ошибкой. Если требуется несколько зависимостей, лучше установить их, используя метод, описанный в следующем разделе.

Создание нескольких зависимостей Python

Несмотря на то, что приведенный выше пример устанавливается, на самом деле он не работает. Это связано с тем, что у модуля запросов есть ряд зависимостей, которые не были установлены:

  • certifi

  • chardet

  • idna

  • urllib3

Четырех зависимостей не так много, и их можно установить с помощью простого метода, описанного выше. Однако что-то более сложное, чем это, быстро станет утомительным.

В этих случаях можно использовать flatpak-pip-generator для генерации необходимого манифеста JSON. Это скрипт Python, который принимает имя пакета и использует pip для определения его зависимостей, а также их URL-адресов и хэшей архивов.

Использовать flatpak-pip-generator так же просто, как запустить:

$ python3 flatpak-pip-generator requests

Или если у вас есть файл requirements.txt , которым вы можете генерировать модули для каждого перечисленного пакета:

$ python3 flatpak-pip-generator --requirements-file=requirements.txt

В результате будет выведен файл с именем python3-requests.json, содержащий необходимый манифест JSON, который затем можно будет включить в файл манифеста вашего приложения. Даже если ваш манифест использует YAML, вы все равно можете включить JSON следующим образом:

modules:
  - python3-requests.json
  # (other modules go here)