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)